Silverlight复选框双向绑定不能按预期工作
问题描述:
我有一个简单的问题,在Silverlight 3.0中设置复选框的双向数据绑定。它一定是一个无脑的,但可能我今天忘了我的大脑家园...Silverlight复选框双向绑定不能按预期工作
我定义了一个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位,那么即使Model正在实现接口,UI也不会注意到基础数据更改。
我该怎么做才能:
- 必须在启动
- 绑定到数据的复选框有复选框器isChecked变化修改基础数据
- 有复选框检测到基础数据的变化和更新自己?
答
您已在设定财产过程中有一个排序的错误,你需要分配到_value
之前通知的变化: -
set
{
this._value = value;
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));
}
谢谢!有效。我告诉过你我今天忘了我的大脑:)) – 2009-09-01 11:14:25