WPF如何将DataGrid单元格FontWeight绑定到对应DataTable单元格内属性
问题原因
你遇到的问题来自两个核心错误:
- 绑定路径完全错误:DataGrid绑定DataView时,每行的DataContext是
DataRowView类型,而非你自定义的CellItem类。你写的{Binding CellItem.bold}根本找不到对应属性,要取指定列的CellItem对象,需要用DataRowView的列索引语法:[列名].属性名。 - 全局CellStyle作用范围错误:你把触发器写在全局单元格样式里,会作用到所有列,第二列是普通字符串类型,不存在
bold属性,绑定会直接失效。
解决方案
推荐手动指定DataGrid列,针对存储CellItem的列单独设置样式即可,修改后的XAML代码如下:
<DataGrid ItemsSource="{Binding grid_items}" GridLinesVisibility="All" CanUserAddRows="False" HorizontalAlignment="Left" Height="200" Margin="0" VerticalAlignment="Top" Width="400" AutoGenerateColumns="False"> <DataGrid.Columns> <!-- 存储CellItem的第一列 --> <DataGridTextColumn Header="column 0" Binding="{Binding [column 0]}"> <DataGridTextColumn.CellStyle> <Style TargetType="DataGridCell"> <Setter Property="TextBlock.TextAlignment" Value="Center" /> <Style.Triggers> <DataTrigger Binding="{Binding [column 0].bold}" Value="True"> <Setter Property="FontWeight" Value="Bold" /> </DataTrigger> </Style.Triggers> </Style> </DataGridTextColumn.CellStyle> </DataGridTextColumn> <!-- 普通字符串类型的第二列 --> <DataGridTextColumn Header="column 1" Binding="{Binding [column 1]}"> <DataGridTextColumn.CellStyle> <Setter Property="TextBlock.TextAlignment" Value="Center" /> </DataGridTextColumn.CellStyle> </DataGridTextColumn> </DataGrid.Columns> </DataGrid>
如果你的列是动态生成的,可以处理DataGrid.AutoGeneratingColumn事件,在事件判断列数据类型为CellItem时,动态给列加上对应的样式触发器即可。
补充说明:如果运行过程中需要动态修改
bold属性后界面自动更新,需要让CellItem类实现INotifyPropertyChanged接口,否则只有初始化的值会生效。
内容的提问来源于stack exchange,提问作者user9893356
相关产品推荐
相关产品推荐

