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}"/>
我必须强调,当 treeview
为 initialised
时,会显示 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}
我有一个 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}"/>
我必须强调,当 treeview
为 initialised
时,会显示 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}