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

能否通过样式基于Model的HasValue属性隐藏DataGrid的Value单元格内容?

解决方案

可以通过样式结合DataTrigger实现该需求。只需将原有的DataGridTextColumn替换为DataGridTemplateColumn,并在单元格模板中为文本控件添加触发规则,当HasValue为false时隐藏内容。

修改后的完整XAML代码如下:

<DataGrid BorderBrush="{x:Null}" ItemsSource="{Binding OptimizationSettings}" Margin="1" IsReadOnly="False" Background="White"
      AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" RowHeaderWidth="20"
      CanUserResizeColumns="False" CanUserResizeRows="False">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Header="Selected" Binding="{Binding Selected}" Width="80"/>
        <DataGridTextColumn Header="Setting" Binding="{Binding SettingName}" Width="*"/>
        <DataGridTemplateColumn Header="Value" Width="*">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Value}">
                        <TextBlock.Style>
                            <Style TargetType="TextBlock">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding HasValue}" Value="False">
                                        <Setter Property="Visibility" Value="Collapsed"/>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </TextBlock.Style>
                    </TextBlock>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <!-- 如需编辑功能,保留以下模板;无需则可删除 -->
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding Value}">
                        <TextBox.Style>
                            <Style TargetType="TextBox">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding HasValue}" Value="False">
                                        <Setter Property="Visibility" Value="Collapsed"/>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </TextBox.Style>
                    </TextBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

关键说明:

  • 用DataGridTemplateColumn替代原生DataGridTextColumn,能更灵活地控制单元格内容的显示逻辑。
  • 通过DataTrigger绑定HasValue属性,当值为false时将文本控件的Visibility设为Collapsed,实现内容隐藏。
  • 若不需要编辑功能,可直接删除CellEditingTemplate部分,仅保留CellTemplate即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:13:13