コンバーターを使用してデータグリッドにデータが入力されているときにセルのテキストカラーを変更する方法は知っていますが、セル値が特定の値に変更された後にテキストカラーを変更することに関連するものは見つかりません。チェックする必要がある値は常に同じではないため、コードからこれを行う必要があります。
public class NameToBrushConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
DataGridCell cell = values[0] as DataGridCell;
Session_Counter.CoreWindow.BindableDynamicDictionary row = values[1] as Session_Counter.CoreWindow.BindableDynamicDictionary;
CoreWindow.Fields field = CoreWindow.fields.Find(o => o.name == cell.Column.Header.ToString());
if (cell != null && row != null && field.color != null)
{
foreach (string str in field.color)
{
List<string> str2 = new List<string>(str.Split(new string[] { "<&p>" }, StringSplitOptions.None).ToList());
if (str2[0].ToString().StartsWith("VALUE = "))
{
if (str2[0].Substring(8) == row[cell.Column.Header.ToString()].ToString())
return new SolidColorBrush((Color)ColorConverter.ConvertFromString(str2[5]));
}
}
}
return Brushes.Black;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
XAML:
<DataGrid AutoGenerateColumns="False" Name="dgwDataMain" CellEditEnding="dgwDataMain_CellEditEnding" SelectionChanged="dgwDataMain_SelectionChanged" PreviewKeyDown="dgwDataMain_PreviewKeyDown" CanUserAddRows="False" Grid.Row="2" Width="Auto" MaxColumnWidth="300" Height="Auto" CanUserReorderColumns="False" CanUserResizeRows="False" >
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Foreground">
<Setter.Value>
<MultiBinding Converter="{StaticResource nameToBC}">
<Binding RelativeSource="{RelativeSource Self}"/>
<Binding Path="."/>
</MultiBinding>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="#CCDAFF" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>