我只需要更改单元格内容的文本颜色,但我的单元格由包含数组属性(我需要(的实体列表绑定。
这是我的代码:--实体:
public class MyEntity{
public string Name { get; set; }
public IList<string> Values { get; set; }
}
-- 数据网格和列表
ObservableCollection<MyEntity> list;
// ....
DataGrid.ItemsSource = list;
--风格
<Style x:Key="DgCellStyle" TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding Values[{Binding self}]}" Value="KK">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
-- 如果我使用 Binding="{绑定值[2]}",它可以工作,但前额适用于行(而不是当前单元格(。
您可以使用
IValueConverer来实现此目的
public class simpleListCheckConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null && ((List<String>)value).Contains((string)parameter))
{
return true;
}
else
{
return false;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
和 Xaml :
<local:simpleListCheckConverter x:Key="simpleListCheckConverter1"/>
<Style x:Key="DgCellStyle" TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Values, Converter={StaticResource simpleListCheckConverter1 },ConverterParameter=kk}" Value="true">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
对于行颜色更改:
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Values, Converter={StaticResource simpleListCheckConverter1 },ConverterParameter=kk}" Value="true">
<Setter Property="Background" Value="Yellow" />
</DataTrigger>
</Style.Triggers>
</Style>