我有一个简单的复选框
<CheckBox IsChecked="{Binding ForceInheritance}"/>
在Code中,我有一个带有“INotifyPropertyChanged”的类和Property
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 .
-
基础数据不会更改
-
我希望CheckBox保持不受控制
检查CheckBox .
当setter实际上没有更改值时,我该怎么做才能不改变CheckBox的IsChecked状态?
我想到了“OnPropertyChanged(”ForceInheritance“);”会做的伎俩,但事实并非如此 .
感谢您的时间 .
1 回答
出现此问题是因为当您单击复选框时,它的值将更改 . 然后绑定导致属性设置 . 在那里你操纵它的值,并希望调用OnPropertyChanged将导致后绑定操作更新复选框值 . 但是不起作用,因为更新属性后更新控件可能会产生无限更新循环 . 为了防止这种PropertyChanged被忽略 .
你能做的是将属性设置器的一些逻辑移动到绑定验证规则 . 您可以阅读有关验证规则的here,或者如果您需要更多信息或示例,请发表评论 .
希望能帮助到你 .