使用转换器在DataGrid列中按值更改DataGrid行颜色

问题描述 投票:0回答:1

我创建了DataGrid并用数据库中的值填充它。

现在我需要像这样的datagrid彩色行:

  1. 如果选中行的CheckBox并且列NANO_status值为1,则行为绿色并且PLC_status为true。
  2. 如果选中行的复选框并且列NANO_status的值为0,则行为黄色
  3. 如果选中行的复选框并且(行NANO_status值2或列NANO_status值1和PLC_status否或列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>

请通过几个单元格状态帮助确定数据网格的颜色行。

c# wpf mvvm converters
1个回答
1
投票

您可以通过使用多数据触发器来执行此操作

      <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>
© www.soinside.com 2019 - 2024. All rights reserved.