我在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
中的子项目{1}}(正确检查其父级),uncheck
其父级(正确取消其子级),然后重新检查父级不再检查的初始子元素。我包含Debug.writeline来检查值是否正确设置,虽然我可以在Output窗口中看到正确的值,但它们没有显示在复选框中。任何帮助将不胜感激。
答案 0 :(得分:1)
将绑定模式更改为TwoWay Mode=TwoWay
答案 1 :(得分:0)
我发现问题Med.Amine.Touil几乎就在那里。复选框有一个错误。当绑定模式设置为OneWay时,它正在失去绑定但是我无法进行绑定TwoWay,因为我不希望值更改直接更改基础dataContext。通过使绑定TwoWay和UpdateSourceTrigger = Explicit我得到了我想要的行为。
IsChecked="{Binding HasAccess, Mode=TwoWay, UpdateSourceTrigger=Explicit}