Как изменить цвет фона ячейки в сетке данных WPF в зависимости от ее значения - PullRequest
1 голос
/ 08 мая 2019

Я хотел бы изменить фон ячеек в сетке данных wpf в соответствии со значением ist.Моя сетка данных выглядит следующим образом:

<DataGrid x:Name="dataGridView_Comparison" ItemsSource="{Binding}" HorizontalAlignment="Stretch"    AlternatingRowBackground="LightBlue" AlternationCount="2"  Height="537" Margin="15,48,5,0" VerticalAlignment="Top" Width="1016" Background="#FF2C2727" Grid.ColumnSpan="2" Style="{DynamicResource DGHeaderStyle}" selectionUnit="FullRow">

Я создаю эту сетку данных динамически в c #, так как количество столбцов всегда меняется в зависимости от входных данных.Часть кода, которая делает это:

DataTable table = new DataTable();
        table.Columns.Add("Column1", typeof(string));
        foreach (string num in numbersList)
        {
            table.Columns.Add(num, typeof(string)); //Adding each numbers as a column in the table
        }
        foreach (string tc in uniqueCases)
        {
            DataRow newRow = table.NewRow(); 

            newRow["Column1"] = tc+"_Case"; //Adding the case name of the row
            foreach (string num in numbersList)
            {
                //For each number column add value corresponding to the condition..
                newRow[num] = "0"; //Default value as 0
                if (list_beforeThreshold.ContainsKey(num + tc) == true)
                {
                    newRow[num] = "1";
                }
                if (list_afterThreshold.ContainsKey(num + tc) == true)
                {
                    newRow[num] = "2";
                }
            table.Rows.Add(newRow);
        }

dataGridView_Comparison.DataContext = table.DefaultView;// Добавление к сетке данных в wpf

Я довольно новичок в c # и wpf.Может кто-нибудь подсказать, пожалуйста, как дать разные цвета в ячейку в зависимости от их значений (0,1,2).PS: я пытаюсь datatrigger сейчас.Но не получая никакого прогресса.

РЕДАКТИРОВАТЬ 1: Нет столбцов и имена столбцов не могут быть жестко закодированы в xaml, потому что они динамически заполняются в C #.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Вы можете использовать IValueConverter для изменения цвета фона.

Определить класс конвертера в xaml:

<Window.Resources>
    <local:NameToBrushConverter x:Key="NameToBrushConverter"/>
</Window.Resources>
<Grid>
    <DataGrid x:Name="testDG" ItemsSource="{Binding tempData}">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Name}">
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="Background" Value="{Binding Name, Converter={StaticResource NameToBrushConverter}}"/>
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

Класс преобразователя:

public class NameToBrushConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    string input = value as string;
    switch (input)
    {
        case "Smith":
            return Brushes.LightGreen;
        case "Willam":
            return Brushes.LightPink;
        default:
            return DependencyProperty.UnsetValue;
    }
 }
 public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
 {
    throw new NotSupportedException();
 } }
0 голосов
/ 08 мая 2019

Это DataTrigger применяется ко всем ячейкам в DataGrid. Когда критерии выполнены, триггер изменит цвет, а если критерии не выполнены, он снова изменится.

<DataGrid>
    <DataGrid.CellStyle>
        <Style TargetType="DataGridCell">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Property}"
                             Value="True">
                    <Setter Property="Background" Value="Red"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.CellStyle>
</DataGrid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...