Изменить цвет строки DataGrid по значению в столбце DataGrid с помощью конвертера - PullRequest
0 голосов
/ 13 марта 2020

Я создал DataGrid и заполнил его значениями из базы данных.

Теперь мне нужны такие цветные строки сетки данных:

  1. Строка зеленая, если флажок строки проверен, а столбец Значение NANO_status равно 1 и PLC_status true.
  2. Строка имеет желтый цвет, если флажок CheckBox строки установлен, а значение столбца NANO_status равно 0
  3. Строка имеет значение красный, если флажок CheckBox строки проверен и (значение NANO_status столбца 2 ИЛИ столбец значение NANO_status 1 и PLC_status false ИЛИ столбец ИЛИ значение NANO_status 0 и PLC_status true).
  4. Строка является стандартным цветом, если флажок строки не отмечен или проверен и (NANO_status или PLC_STATUS) пуст.

считает, что лучше всего использовать конвертеры.

уже созданный класс конвертеров:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    var isOnline = (bool)value;
    if (isOnline)
    {
        return Brushes.Green;
    }
    else
        return Brushes.Red;
}

не может понять, как свойство связывает его, чтобы получить требуемый результат. Вот как я пытался:

<Window.Resources>
    <converters:StateToBrushConverter x:Key="StateToBrush"/>
</Window.Resources>

<Border Padding="5">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>            
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="Filter" Margin="5"/>
            <TextBox Text="{Binding FilterText,UpdateSourceTrigger=PropertyChanged}" Width="200" Margin="5"/>
        </StackPanel>
        <DataGrid  Grid.Row="1"  AutoGenerateColumns="false" ItemsSource="{Binding Items}" >
            <DataGrid.RowStyle>
                <Style TargetType="{x:Type DataGridRow }">
                    <Setter Property="Background" Value="{Binding ACTIVE, Converter={StaticResource StateToBrush}}"></Setter>
                </Style>
            </DataGrid.RowStyle>
            <DataGrid.Columns>
                <DataGridCheckBoxColumn x:Name="DGC" Header="ACTIVE" Binding="{Binding ACTIVE}"/>
                <DataGridTextColumn Header="DEVICE" Binding="{Binding DEVICE}"/>
                <DataGridTextColumn Header="NANO IP" Binding="{Binding NANO_IP}"/>
                <DataGridTextColumn Header="PLC IP" Binding="{Binding PLC_IP}"/>
                <DataGridTextColumn Header="NANO STATUS" Binding="{Binding NANO_STATUS}"/>
                <DataGridTextColumn Header="PLC STATUS" Binding="{Binding PLC_STATUS}"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>

, пожалуйста, помогите выяснить, как цвет ряда данных сетки по нескольким состояниям ячеек.

1 Ответ

1 голос
/ 13 марта 2020

Вы можете сделать это, используя триггер нескольких данных

<DataGrid.RowStyle>
   <Style TargetType="DataGridRow">
        <Style.Triggers>
            <MultiDataTrigger >
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Path=NANO_STATUS}" Value="True" />
                    <Condition Binding="{Binding Path=PLC_STATUS}" Value="True" />
                </MultiDataTrigger.Conditions>
                <Setter Property="Background" Value="Red" />
            </MultiDataTrigger>
        </Style.Triggers>
        <Setter Property="Background" Value="Green" />
    </Style>
</DataGrid.RowStyle>
...