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也不会注意到底层数据的更改.
我该怎么做:
您的set属性过程中有一个排序错误,您需要_value
在通知更改之前分配: -
set
{
this._value = value;
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9614 次 |
最近记录: |