DataGrid有时需要对某个表格的数据进行突出显示:
思路:利用IMultiValueConverter对多参数的数据进行后台验证,返回值可针对字体、背景色、字体大小等可视数据。
前端代码如下:
<DataGrid PreviewTextInput="Mum_PreviewTextInput" MouseDoubleClick="DataGrid_MouseDoubleClick"
Style="{StaticResource DataGrid.Style}" BorderBrush="{DynamicResource Border.BorderBrushThems}" BorderThickness="1 1 1 0" ItemsSource="{Binding ParseXML.DriverParaList}" FontWeight="Normal">
<DataGrid.Columns>
<DataGridTemplateColumn Header="offline" Width="95" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock x:Name="off" Text="{Binding Path=Offine,Mode=OneWay}" Tag ="{Binding Path=Actualvalue}" HorizontalAlignment="Stretch" VerticalAlignment="Center" TextAlignment="Center">
<TextBlock.Background>
<MultiBinding Converter="{StaticResource MultiParaToColor}">
<Binding Path="Text" ElementName="off"/>
<Binding Path="Tag" ElementName="off"/>
</MultiBinding>
</TextBlock.Background>
</TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="OnlineValue" Width="95" Binding="{Binding Path=Actualvalue}" IsReadOnly="True" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
</DataGrid>
后台转换器如下:
public class MultiParaToColorConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if ((values[1] != null) && (values[0] != null))
{
if (values[1].ToString() != values[0].ToString())
{
return new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Red);
}
else
{
return new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Transparent);
}
}
else
{
return new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.Transparent);
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}