繁体   English   中英

如何将布尔值绑定到GridViewColumn复选框(有代码,但不起作用)?

[英]How to bind boolean to GridViewColumn checkboxes (have code but doesn't work)?

我试图将布尔值绑定到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" ); }
}

考虑一下更新后的属性中的问题:该属性没有后备字段,它的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}"/>

这种笨拙的表示法将在Window类型的可视树中找到最接近CheckBox的父元素,并绑定到其DataContext属性以查找HasPermission。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM