Цвет ячейки C # DataGrid кажется случайным wpf

Я написал код, чтобы попытаться изменить цвет ячейки 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}">

My ' < local : ValueToBrushConverter x : Key = "ValueToBrushConverter" /> < Style x : Key = "CellStyle" TargetType = "DataGridCell" > < Свойство Setter = "Background" Value = "{Binding RelativeSource = {RelativeSource Self}, конвертер = {StaticResource ValueToBrushConverter}} " /> </ Style > 'Ресурс

 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 DataInputs.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();
    }

И, наконец, мой ValueToBrushConverter:

VirtualizingStackPanel.VirtualizationMode

Обратите внимание, что потоковой блок просто для моего тестирования, чтобы увидеть, какие значения возвращаются.

Как сказано, код работает изначально, но после прекращения работы, этот gif показывает, что я имею в виду

https://gyazo.com/099873b8738887bddaf418c3b45129e3

Вы можете видеть, что некоторые значения, которые не должны быть выделены, подсвечиваются и наоборот

c#,wpf,datagrid,cell,

0

Ответов: 1


1

Это связано с виртуализацией пользовательского интерфейса, то есть контейнеры элементов повторно используются при прокрутке элементов.

Вы можете отключить это, установив Standardприложенное свойство , при потенциальной стоимости некоторой прокрутки:<DataGrid ... VirtualizingStackPanel.VirtualizationMode="Standard">

CellStyle

Какова фактическая разница между Утилитой / Стандартом свойства VirtualizationMode в VirtualizingStackPanel?

Лучшим вариантом будет использование конкретного CellStyleдля каждого столбца, который связывается с фактическим исходным свойством элемента, например:

<DataGridTextColumn Binding="{Binding Name}">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="Background" Value="{Binding Name, 
                                    Converter={StaticResource ValueToBrushConverter}}" />
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>
C #, WPF, DataGrid, клетка,
Похожие вопросы