You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XAML中用触发器将TestMessage为null的DataGridTextColumn设为Collapsed

解决方案

要实现当TestMessage为null时隐藏对应单元格(或单元格内的文本控件),你需要使用**CellStyle(控制整个单元格的显示)或ElementStyle**(仅控制单元格内的文本控件),具体选择取决于你的需求:

1. 使用 CellStyle 隐藏整个单元格

如果希望当TestMessage为null时,整个单元格(包括边框、背景等)都隐藏,直接给DataGridTextColumn设置CellStyle,在其中添加DataTrigger判断TestMessage是否为null:

<DataGrid
    ItemsSource="{Binding Notifications, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
    AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn
            Header="Test Message"
            Binding="{Binding TestMessage}">
            <DataGridTextColumn.CellStyle>
                <Style TargetType="DataGridCell">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding TestMessage}" Value="{x:Null}">
                            <Setter Property="Visibility" Value="Collapsed"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </DataGridTextColumn.CellStyle>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

2. 使用 ElementStyle 隐藏单元格内的文本控件

如果只需要隐藏文本内容,保留单元格的边框和布局,就使用ElementStyle,它作用于单元格内的TextBlock:

<DataGrid
    ItemsSource="{Binding Notifications, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
    AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn
            Header="Test Message"
            Binding="{Binding TestMessage}">
            <DataGridTextColumn.ElementStyle>
                <Style TargetType="TextBlock">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding TestMessage}" Value="{x:Null}">
                            <Setter Property="Visibility" Value="Collapsed"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </DataGridTextColumn.ElementStyle>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

关键说明

  • DataGridTextColumn本身没有Style属性,所以不能直接给列加触发器,必须通过CellStyle(作用于单元格容器)或ElementStyle(作用于单元格内的显示控件)来实现行级的条件判断。
  • 两种方式都不需要修改ViewModel,完全通过XAML的触发器实现空值判断。

内容的提问来源于stack exchange,提问作者Tommer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:13:10