wpf 树视图中的复选框值不等于绑定值 属性

Checkbox value in wpf treeview is not equal to value of bound property

我有一个 wpf 形式的 treeview,最初绑定正确,但树中 checking and unchecking 项目的某些组合导致 binding 无法保持。

这里是 属性;

const string HAS_ACCESS = "HasAccess";

 public bool? HasAccess
 {
    get
      {
         return hasAccess;
      }
    set
      {
         if (hasAccess == value) return;
           if(!AllowUpdate(value)) return;
              //Debug.WriteLine("{0}  tried to set hasAccess to a value of {1} D = {2}, A = {3}, u = {4}, AllowChange = {5}, I = {6}", myPermission.Name, value, descendantChanged, ancestorChanged, userInstigatedChange, AllowUpdate(value), isInitialising);
            ResetChangeBools();
            hasAccess = value;
            Debug.WriteLine("HasAccess = {0}", HasAccess);
            isInitialising = false;
            RaisePropertyChanged(HAS_ACCESS);
      }
   }

这是xaml;

   <CheckBox Grid.Column="0" Grid.Row="1"
             IsThreeState="true"
             Content="{Binding MyPermission.Name}"
             Click="CheckBox_Clicked"
             IsChecked="{Binding HasAccess, Mode=OneWay}"/>

我必须强调,当 treeviewinitialised 时,会显示 HasAccess 的正确值,并且在大部分时间更改时都会更新,但如果我在treeview(正确检查其父元素),uncheck 其父元素(正确取消选中其子元素),然后重新检查父元素不再检查的初始子元素。我包含了 Debug.writeline 来检查值是否设置正确,虽然我可以在输出 window 中看到正确的值,但它们没有显示在复选框中。任何帮助将不胜感激。

将您的绑定模式更改为 TwoWay Mode=TwoWay

我发现问题 Med.Amine.Touil 几乎就在那里。复选框存在错误。当绑定模式设置为 OneWay 时,它正在失去绑定,但我无法进行 TwoWay 绑定,因为我不希望值更改直接更改基础 dataContext。通过绑定 TwoWay 和 UpdateSourceTrigger = Explicit,我得到了我想要的行为。

IsChecked="{Binding HasAccess, Mode=TwoWay, UpdateSourceTrigger=Explicit}