WPF复选框绑定-更改属性集中的值不会影响UI

WPF复选框绑定-更改属性集中的值不会影响UI,wpf,validation,binding,inotifypropertychanged,Wpf,Validation,Binding,Inotifypropertychanged,我有一个简单的复选框 <CheckBox IsChecked="{Binding ForceInheritance}"/> 如果SomeTest()返回!值,使基础数据不必更改复选框,但仍会更改其IsChecked状态 例如: ForceInheritation为false。 已单击复选框。 SomeTest()返回false。 -->基础数据未更改 -->我希望复选框保持未选中状态 复选框被选中 当setter实际上没有更改值时,我可以做什么来不更改复选框的IsChecked状态

我有一个简单的复选框

<CheckBox IsChecked="{Binding ForceInheritance}"/>
如果SomeTest()返回!值,使基础数据不必更改复选框,但仍会更改其IsChecked状态

例如:
ForceInheritation为false。
已单击复选框。
SomeTest()返回false。
-->基础数据未更改
-->我希望复选框保持未选中状态
复选框被选中

当setter实际上没有更改值时,我可以做什么来不更改复选框的IsChecked状态

我原以为“OnPropertyChanged(“forceInheritation”);”会奏效,但事实并非如此


感谢您抽出时间。

出现此问题的原因是,当您单击复选框时,其值已更改。然后绑定导致属性集。在这里,您可以使用其值进行操作,并希望调用OnPropertyChanged将导致回绑定操作更新复选框值。但不起作用,因为更新属性后更新控件可能会产生无限的更新循环。要防止此属性更改,将忽略

您可以做的是将属性设置程序的一些逻辑移动到绑定验证规则。如果需要更多信息或示例,您可以阅读验证规则或留下评论


希望有帮助。

你好!我认为OnPropertyChanged()会再次触发getter而不是setter。但谢谢你的回答,这让我找到了解决办法。按照建议使用验证。当setter未更改基础值时,我创建了一条errormessage。返回验证errormessage时,删除errormessage并调用OnPropertyChanged()。-->使用正确的值调用getter-->复选框保持未选中状态。
public bool ForceInheritance
{
  get { return forceInheritance; }

  set
  {
    if (forceInheritance != value)
    {
      value = SomeTest();

      if (forceInheritance != value)
      {
        //something is done here.
      }

      OnPropertyChanged("ForceInheritance");
    }
  }
}