我正在尝试将bool值绑定到GridViewColumn
中的复选框,但它不起作用。我甚至试图返回false,但复选框仍然显示为启用。它只适用于在xaml中输入“False”。
绑定属性是:
public bool HasPermissions
{
get { return this.UserPrivileges == UserPrivileges.FullAccess; }
}
this.UserPrivileges
的当前值不是UserPrivileges.FullAccess
。
Xaml代码:
<Window x:Class="EffectsWindow.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Effects Manager"
Width="800"
Height="500"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
<DockPanel VerticalAlignment="Stretch">
<DockPanel.Resources>
<ListView x:Name="EffectsListView"
ItemsSource="{Binding AllEffects}">
<ListView.View>
<GridView>
<GridViewColumn Width="50" Header="Override">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox Margin="0"
HorizontalAlignment="Center"
IsEnabled="{Binding HasPermission}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</DockPanel>
</Window>
编辑:当前属性代码:
public bool HasPermissions
{
get { return this.UserPermissions == UserPermissions.FullAccess; }
set { this.RaisePropertyChanged ( "HasPermissions" ); }
}
答案 0 :(得分:1)
考虑更新后的属性中的问题:该属性没有后备字段,其getter返回将不同属性与UserPermissions.FullAccess
进行比较的结果。因此,它永远不会 设置。
需要关注的是,什么时候需要通知UI HasPermissions
返回的值已经改变?那么,当可以那个值改变了吗?当this.UserPermissions
的值发生变化时,对吧?
假设this.UserPermissions
本身是一个带有setter的属性,其setter 就是调用RaisePropertyChanged("HasPermissions")
的地方。这将告诉UI,即使它没有直接绑定到UserPermissions
,它 绑定到的属性也必须重新评估。
更新关于您的评论,IsChecked
确实是您应该绑定HasPermissions
的CheckBox属性,如果您希望框的已选中状态指示用户有权限。
更新第二个:听起来您想要从可视子项(ListBox)访问Window的DataContext的属性。你可以使用RelativeSource绑定来实现它,如下所示:
<CheckBox Margin="0"
HorizontalAlignment="Center"
IsEnabled="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.HasPermission}"/>
这种有点笨重的符号将在可视树中找到最接近CheckBox的父元素,它是Window类型,并绑定到其DataContext属性以查找HasPermission。