我有一个DataGrid,其ItemsSource绑定到一个不断变化的Observable Collection。这个集合的内部是一个业务对象。根据业务对象属性的某些值,我希望能够在创建ItemsSource后修改DataGrid中显示的每个项目的文本颜色。
之前是否有人这样做过或遇到类似的事情?提前谢谢。
<DataTemplate x:Key="MyTemplate">
<Grid x:Name="LayoutRoot">
<TextBlock Text="{Binding MyText}"
Foreground="{Binding MyStatus, Converter={StaticResource colorConverter}}" />
</Grid>
</DataTemplate>
我添加了上面的代码并将TemplateColumn插入到网格中,如下所示:
<data:DataGridTemplateColumn Header="Testing"
CellTemplate="{StaticResource MyTemplate}"/>
代码工作正常并提取正确的文本,但转换器永远不会触发,前景的绑定永远不会从上面调用。
有什么想法吗?
答案 0 :(得分:0)
是。在数据绑定时使用Value Converter。
<UserControl.Resources>
<myconverters:BackColor x:Key="BackColor" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="{Binding SomeValue, Converter={StaticResource BackColor}" >
</Grid>
然后让你的转换器类实现IValueConverter并返回某种类型的Brush对象。您通常不必实现ConvertBack()
答案 1 :(得分:0)
添加到BC的答案:
您可以创建DataGridTemplateColumn并为列中的单元格指定数据模板。在数据模板中,您可以绑定文本颜色。
<swcd:DataGrid ... >
<swcd:DataGrid.Columns>
<swcd:DataGridTemplateColumn Header="MyColumn" CellTemplate="{StaticResource MyColumnDataGridCellTemplate}"/>
...
资源中的:
<DataTemplate x:Key="MyColumnDataGridCellTemplate">
<Grid>
<TextBlock Text="{Binding someproperty}" Foreground="{Binding someotherproperty, Converter={StaticResource MyConverter}}"/>
...