【发布时间】:2021-12-03 10:27:12
【问题描述】:
我有一个DataGrid。 DataGrid 中有 12 列。这些列中的每一列都代表 0-255 之间的 byte 值。我想根据用户输入的范围为它们着色。
我不知道如何根据用户输入更改这些值。用户可以为每列指定不同的范围。下面是我手动实现的应用程序。如何将此应用绑定到用户登录。
转换器
public class DataGridColorConverter : IValueConverter
{
public object Convert(
object value, Type targetType,
object parameter, CultureInfo culture)
{
byte data = (byte)value;
if (data <= 30)
return 0;
else if (data <= 60)
return 1;
else if (data <= 90)
return 2;
else
return 3;
}
public object ConvertBack(
object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Xaml
<UserControl.Resources>
<my:DataGridColorConverter x:Key="DGCConverter"/>
</UserControl.Resources>
<DataGrid Name="MyDataGrid"
Grid.Row="1"
AutoGenerateColumns="False"
ItemsSource="{Binding JobsCollectionView , IsAsync=True}"
VirtualizingStackPanel.VirtualizationMode="Recycling"
IsReadOnly="True"
Height="480">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
<DataGridTextColumn Header="RTR" Binding="{Binding RTR}"/>
<DataGridTextColumn Header="IDE" Binding="{Binding IDE}"/>
<DataGridTextColumn Header="DLC" Binding="{Binding DLC}"/>
<DataGridTextColumn Header="BYTE-0" Binding="{Binding Byte0}"/>
<DataGridTextColumn Header="BYTE-1" Binding="{Binding Byte1}"/>
<DataGridTextColumn Header="BYTE-2" Binding="{Binding Byte2}"/>
<DataGridTextColumn Header="BYTE-3" Binding="{Binding Byte3}"/>
<DataGridTextColumn Header="BYTE-4" Binding="{Binding Byte4}"/>
<DataGridTextColumn Header="BYTE-5" Binding="{Binding Byte5}"/>
<DataGridTextColumn Header="BYTE-6" Binding="{Binding Byte6}"/>
<DataGridTextColumn Header="BYTE-7" Binding="{Binding Byte7}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="Green" />
<Style.Triggers>
<DataTrigger Binding="{Binding Byte7,Converter={StaticResource DGCConverter}}" Value="1">
<Setter Property="Foreground" Value="Yellow" />
</DataTrigger>
<DataTrigger Binding="{Binding Byte7,Converter={StaticResource DGCConverter}}" Value="2">
<Setter Property="Foreground" Value="Orange" />
</DataTrigger>
<DataTrigger Binding="{Binding Byte7,Converter={StaticResource DGCConverter}}" Value="3">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="TIME" Binding="{Binding Time, StringFormat=\{0:dd.MM.yy HH:mm:ss\}}"/>
</DataGrid.Columns>
</DataGrid>
注意:我正在使用 MVVM。
注意2:我没有共享用户可以输入值范围的字段,以免在XAML中拥挤。
例如,用户希望Blue 介于 0-100 之间,Red 介于 100-150 之间,Green 介于 150-255 之间。
【问题讨论】:
标签: wpf xaml mvvm data-binding datatrigger