能否通过样式基于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
相关产品推荐
相关产品推荐

