【问题标题】:Change DataGrid row color by value in DataGrid column using converter使用转换器按 DataGrid 列中的值更改 DataGrid 行颜色
【发布时间】:2023-03-08 05:41:01
【问题描述】:

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

现在我需要这样的数据网格颜色行:

  1. 如果选中行的 CheckBox 且列 NANO_status 值为 1,则行为绿色 和 PLC_status 为真。
  2. 如果选中行的 CheckBox 且列 NANO_status 值为 0,则行为黄色
  3. 如果选中行的 CheckBox 并且(列 NANO_status 值 2 或列 NANO_status 值 1 和 PLC_status 假或列 NANO_status 值 0 和 PLC_status 真),则行为红色。
  4. 如果行的 CheckBox 未选中或选中并且(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】:

    你可以通过使用多数据触发器来做到这一点

    <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>
    

    【讨论】:

    • 任何想法如何制作如上所述?
    猜你喜欢
    • 2017-02-06
    • 2016-06-04
    • 2017-11-15
    • 2011-03-01
    • 2010-12-03
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多