0

我正在尝试将 bool 值绑定到 a 中的复选框GridViewColumn,但它不起作用。我什至尝试只返回 false,但复选框看起来仍然启用。仅当我在 xaml 中键入“False”时它才有效。

绑定的属性是:

public bool HasPermissions
{
    get { return this.UserPrivileges == UserPrivileges.FullAccess; }
}

的当前值this.UserPrivileges不是UserPrivileges.FullAccess

Xml代码:

<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" ); }
}
4

1 回答 1

1

想想您更新的属性中的问题:该属性没有支持字段,它的 getter 返回将不同属性与UserPermissions.FullAccess. 因此它永远无法设置。

需要重点关注的是,UI 什么时候需要通知返回的值发生了HasPermissions变化?那么,这个值什么时候可以改变?当值发生this.UserPermissions变化时,对吗?

假设this.UserPermissions它本身是一个带有 setter 的属性,那么它的 setter就是调用的地方RaisePropertyChanged("HasPermissions")。这将告诉 UI,即使它不直接绑定到,UserPermissions绑定到的属性也必须重新评估。

更新:关于您的评论,如果您希望框的选中状态指示用户具有权限,IsChecked则确实应该绑定到 CheckBox 属性。HasPermissions

更新第二个:听起来您想从可视子项(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。

于 2011-03-16T21:12:04.927 回答