【发布时间】:2023-03-08 05:41:01
【问题描述】:
我创建了 DataGrid 并用数据库中的值填充它。
现在我需要这样的数据网格颜色行:
- 如果选中行的 CheckBox 且列 NANO_status 值为 1,则行为绿色 和 PLC_status 为真。
- 如果选中行的 CheckBox 且列 NANO_status 值为 0,则行为黄色
- 如果选中行的 CheckBox 并且(列 NANO_status 值 2 或列 NANO_status 值 1 和 PLC_status 假或列 NANO_status 值 0 和 PLC_status 真),则行为红色。
- 如果行的 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