【发布时间】:2015-10-20 19:38:47
【问题描述】:
我有一个 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}"/>
我必须强调,HasAccess 的正确值在 treeview 为 initialised 时显示,并且在大多数情况下都会更新,但如果我检查 treeview 中的子项(正确检查它的父元素),uncheck 它的父元素(正确地取消选中它的子元素)然后重新检查父元素不再检查的初始子元素。我包含了 Debug.writeline 以检查是否正确设置了值,尽管我可以在“输出”窗口中看到正确的值,但它们未显示在复选框中。任何帮助将不胜感激。
【问题讨论】: