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

And*_*nea 2 data-binding silverlight checkbox silverlight-2.0 silverlight-3.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;
}
Run Code Online (Sandbox Code Playgroud)

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

    <StackPanel Orientation="Horizontal">
        <CheckBox x:Name="check" IsChecked="{Binding Value, Mode=TwoWay}" Content="SomeLabel"/>    
        <Button Click="Button_Click" Content="Test" />
    </StackPanel>
Run Code Online (Sandbox Code Playgroud)

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

    public MainPage()
    {
        InitializeComponent();

        this.DataContext = new Model() { Value = true };
    }
Run Code Online (Sandbox Code Playgroud)

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

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

我该怎么做:

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

Ant*_*nes 8

您的set属性过程中有一个排序错误,您需要_value 通知更改之前分配: -

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

    }
Run Code Online (Sandbox Code Playgroud)