Silverlight复选框双向绑定不按预期工作

时间:2009-09-01 10:53:11

标签: silverlight data-binding silverlight-3.0 checkbox silverlight-2.0

我有一个简单的问题,即在Silverlight 3.0中设置复选框的双向数据绑定。它必须是明智的,但我今天可能忘记了我的大脑......

我定义了一个Model类来表示我的''数据'。我实现了INotifyPropertyChanged接口,使UI能够查看数据何时发生变化。

public class Model : INotifyPropertyChanged
{
    private bool _value;
    public bool Value
    {
        get { return this._value; }
        set
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));
            this._value = value;
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

接下来,我在...'表单'上放了一个复选框和一个按钮:

    <StackPanel Orientation="Horizontal">
        <CheckBox x:Name="check" IsChecked="{Binding Value, Mode=TwoWay}" Content="SomeLabel"/>    
        <Button Click="Button_Click" Content="Test" />
    </StackPanel>

然后我在构造函数中提供了数据:

    public MainPage()
    {
        InitializeComponent();

        this.DataContext = new Model() { Value = true };
    }

问题是你必须在复选框上单击两次才能检查/取消选中,除非我取消执行INotifyPropertyChanged。但是,如果取消实现它,则UI不会注意到我是否更改了基础数据。

如果我从IsChecked绑定表达式中删除Mode = TwoWay位,那么即使模型正在实现接口,UI也不会注意到基础数据的变化。

我该怎样做:

  1. 启动时将复选框绑定到数据
  2. 选中复选框IsChecked以修改基础数据
  3. 让复选框检测基础数据更改并自行更新?

1 个答案:

答案 0 :(得分:8)

您的设置属性过程中出现了排序错误,您需要在通知更改前指定_value : -

    set
    {
        this._value = value;
        if (this.PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));

    }