Я написал некоторый код, чтобы попытаться изменить цвет ячейки DataGrid в зависимости от длины значения внутри ячейки. Однако, кажется, что он работает правильно, когда загружается в первые несколько строк, однако, когда я прокручиваюсь вниз по строкам, он, кажется, случайно меняет цвет.
Мой XML-код:
<DataGrid Grid.Row="2" Name="DataGridView1" CanUserSortColumns="False" CanUserReorderColumns="False" IsReadOnly="True" ItemsSource="{Binding}" Background="LightGray" RowBackground="#BDBDBF" AlternatingRowBackground="#E3E3E5" CellStyle="{StaticResource CellStyle}">
Мой ресурс CellStyle -
<local:ValueToBrushConverter x:Key="ValueToBrushConverter"/>
<Style x:Key="CellStyle" TargetType="DataGridCell">
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource ValueToBrushConverter}}" />
</Style>
И, наконец, мой ValueToBrushConverter:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
DataGridCell dgc = (DataGridCell)value;
System.Data.DataRowView rowView = (System.Data.DataRowView)dgc.DataContext;
var input = rowView.Row.ItemArray[dgc.Column.DisplayIndex];
StreamWriter sw = new StreamWriter(@"C:\DM Data\Inputs.txt",true);
sw.WriteLine(input + " " + input.ToString().Length);
sw.Close();
sw.Dispose();
if (input.ToString().Length < 32)
return new SolidColorBrush(Colors.LimeGreen);
else if (input.ToString().Length >= 32)
return (SolidColorBrush)(new BrushConverter().ConvertFrom("#FF1616"));
else
return new SolidColorBrush(Colors.Black);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
Обратите внимание, что streamwriter предназначен только для моего тестирования, чтобы увидеть, какие значения возвращаются.
Как уже говорилось, код работает изначально, но после того, как перестает работать, этот gif показывает, что я имею в виду
https://gyazo.com/099873b8738887bddaf418c3b45129e3
Вы можете увидеть, что некоторые значения, которые не должны быть выделены, станут выделенными, и наоборот