【问题标题】:WPF DataGridCheckBoxColumn: how to hide the checkbox if the binding value is null?WPF DataGridCheckBoxColumn:如果绑定值为空,如何隐藏复选框?
【发布时间】:2011-08-30 01:26:44
【问题描述】:

我有一个 DataGridCheckBoxColumn 绑定到可为空的 bool 的数据网格。如果值为空,我想完全隐藏复选框。我尝试了以下触发器,但它不起作用:

<Style TargetType="CheckBox">
    <Style.Triggers>
        <Trigger Property="IsChecked" Value="{x:Null}">
            <Setter Property="Visibility" Value="Hidden"/>
        </Trigger>
    </Style.Triggers>
</Style>

有可能吗?非常感谢您的帮助!

【问题讨论】:

    标签: wpf datagrid checkbox


    【解决方案1】:

    DataGrid 中总是有两种样式,ElementStyleEditingElementStyle,您的样式应该应用为ElementStyle,然后您仍然可以编辑该复选框,但它在未编辑时将不可见模式如果为空。还需要启用这三种状态。

    <DataGridCheckBoxColumn Binding="{Binding MyNullableBool}" IsThreeState="True">
        <DataGridCheckBoxColumn.ElementStyle>
            <Style TargetType="CheckBox">
                <Style.Triggers>
                    <Trigger Property="IsChecked" Value="{x:Null}">
                        <Setter Property="Visibility" Value="Hidden"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGridCheckBoxColumn.ElementStyle>
    </DataGridCheckBoxColumn>
    

    【讨论】:

    • +1。这是正确的答案,但是如果您不添加 IsThreeState="True",它会更好地工作,假设用例是用户只想使用网格中未绑定为 null 的复选框。
    • 它部分适用于我。如果为空,它会隐藏复选框。但是,我也观察到以下问题: 1. 我的专栏是只读的。但是,在我应用此样式后,复选框不再是只读的。实际上,我的绑定属性只是一个 getter,所以我不确定可检查状态是如何绑定的。 2. 复选框现在左对齐。它曾经是居中的。 3. 我怎样才能使它成为可重复使用的样式?我有很多这样的专栏,我不想对每一专栏都重复同样的事情。 4. 我看不出设置或不设置 IsThreeState=True 有什么区别。
    • 您可以将样式定义为资源 (DataGrid.Resources),然后直接引用它:&lt;DataGridCheckBoxColumn ElementStyle="{StaticResource myStyle}"/&gt;,其中myStyle 是分配给样式的x:Key。还要在绑定中设置Mode=OneWay,它不应该是可编辑的(我什至遇到了一个异常,当我删除了setter时迫使我这样做)。
    • 好的,我使用资源让它工作了——我不知道我可以为 ElementStyle 分配一个样式。然后可以通过在我的样式中将 Horizo​​ntalAlignment 属性的设置器添加到 Center 来解决对齐问题。关于编辑状态,我已经定义了 Mode=OneWay ,如果我删除它,我会得到你所说的异常。以某种方式设置 ElementStyle 会删除我的 IsReadOnly 设置,并且我无法在 CheckBox 的样式中设置 IsReadOnly,因为它不是 CheckBox 属性。我能得到的最接近的是在我的风格中设置 IsEnabled=False 。 IsReadOnly 是 Column 的属性。如何重置?
    • 我不知道为什么,我也会使用IsEnabled = false 方法。
    猜你喜欢
    • 1970-01-01
    • 2013-10-11
    • 2018-06-20
    • 1970-01-01
    • 2011-08-20
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多