Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用转换器在DataGrid列中按值更改DataGrid行颜色_C#_Wpf_Mvvm_Converters - Fatal编程技术网

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

C# 使用转换器在DataGrid列中按值更改DataGrid行颜色,c#,wpf,mvvm,converters,C#,Wpf,Mvvm,Converters,我创建了DataGrid并用数据库中的值填充它 现在我需要datagrid的颜色行,如下所示: 如果选中了行的复选框且列NANO_状态值为1,则行为绿色 PLC_状态为true 如果选中行的复选框且列的NANO_状态值为0,则行为黄色 如果选中了行的复选框且(列NANO_状态值2或列NANO_状态值1和PLC_状态为false或列NANO_状态值0和PLC_状态为true),则行为红色 如果行的复选框未选中或选中且(NANO_状态或PLC_状态)为空,则行为标准颜色 认为最好是使用转换器 已创建

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

现在我需要datagrid的颜色行,如下所示:

  • 如果选中了行的复选框且列NANO_状态值为1,则行为绿色 PLC_状态为true
  • 如果选中行的复选框且列的NANO_状态值为0,则行为黄色
  • 如果选中了行的复选框且(列NANO_状态值2或列NANO_状态值1和PLC_状态为false或列NANO_状态值0和PLC_状态为true),则行为红色
  • 如果行的复选框未选中或选中且(NANO_状态或PLC_状态)为空,则行为标准颜色
  • 认为最好是使用转换器

    已创建的转换器类:

    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>
    
    
    

    请通过几个单元格状态帮助计算datagrid行的颜色。

    您只需使用multidata触发器即可完成此操作


    有什么想法可以像上面描述的那样制作吗?