wpf treeview中的复选框值不等于绑定属性

时间:2015-10-19 15:17:59

标签: c# wpf checkbox treeview

我在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}"/>

我必须强调,当HasAccesstreeview时会显示initialised的正确值,并且会在最近时间更改时更新,但如果我检查treeview中的子项目{1}}(正确检查其父级),uncheck其父级(正确取消其子级),然后重新检查父级不再检查的初始子元素。我包含Debug.writeline来检查值是否正确设置,虽然我可以在Output窗口中看到正确的值,但它们没有显示在复选框中。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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