我有一个简单的复选框
<CheckBox IsChecked="{Binding ForceInheritance}"/>
在Code中我有一个带有“INotifyPropertyChanged”和属性
的类public bool ForceInheritance
{
get { return forceInheritance; }
set
{
if (forceInheritance != value)
{
value = SomeTest();
if (forceInheritance != value)
{
//something is done here.
}
OnPropertyChanged("ForceInheritance");
}
}
}
如果SomeTest()返回!值,那么基础数据不必更改CheckBox仍然会更改其IsChecked状态。
例如:
ForceInheritance是假的。
单击CheckBox。
SomeTest()返回false
- &GT;基础数据不会改变
- &GT;我希望CheckBox保持不受控制
检查CheckBox。
当setter实际上没有更改值时,我怎么能不改变CheckBox的IsChecked状态?
我认为“OnPropertyChanged(”ForceInheritance“);”会做的但是没有。
感谢您的时间。
答案 0 :(得分:1)
出现此问题是因为当您单击复选框时,它的值会更改。然后绑定导致属性设置。在那里你操纵它的值,并希望调用OnPropertyChanged将导致后绑定操作更新复选框值。但是不起作用,因为更新属性后更新控件可能会产生无限更新循环。为了防止这种PropertyChanged被忽略。
您可以做的是将属性设置器的某些逻辑移动到绑定验证规则。您可以阅读有关验证规则的here,或者如果您需要更多信息或示例,请发表评论。
希望它有所帮助。