WPF DataGrid根据值改变行样式

来源:转载

在开发的过程中有的时候会遇到一种情况,就是使用DataGrid来显示数据,显示数据的同时,我们会想让数据根据不同的值显示出不同的样式。

WPF中有了这样的东西,叫做触发器,触发器中有这么一种叫做数据触发器(DataTrigger) ,它的作用是,根据一个值,做相应的事情。

我现在要实现的是通过MVVM模式的操作,使用DataGrid来显示人员类集合的数据,然后当大于年龄(Age)23的行的字体显示为红色。

本来,DataTrigger触发器只能支持等于操作。

下面的代码的作用是,当值等于23的时候DataGridRow行的字体颜色为红色。

 <Style TargetType="{x:Type DataGridRow}"> <Style.Triggers> <DataTrigger Binding="{Binding Age}" Value="23"> <Setter Property="ToolTip"> <Setter.Value> <ToolTip> <TextBlock Text="{Binding Age,StringFormat='年龄:{0}超出'}"/> </ToolTip> </Setter.Value> </Setter> <Setter Property="Foreground" Value="Red" /> </DataTrigger> </Style.Triggers> </Style>

想要操作等于以外的情况时,只能自己写一个值转换类,继承IValueConverter 。

namespace dataGrid_binding.ViewModel{ public class AgeConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { int v = 0, p = 0; int.TryParse(value.ToString(), out v); int.TryParse(parameter.ToString(), out p); return v > p; }  public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }}

以下的内容写在Xaml页面上。

<Window x:Class="dataGrid_binding.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:VM="clr-namespace:dataGrid_binding.ViewModel" Title="MainWindow" Height="395" Width="713"> <Window.Resources> <VM:StudentViewModel x:Key="ViewModel" />  <VM:AgeConverter x:Key="AgeConvert" /> <Style TargetType="{x:Type DataGridRow}"> <Style.Triggers> <DataTrigger Binding="{Binding Age,Converter={StaticResource AgeConvert},ConverterParameter=22}" Value="True"> <Setter Property="ToolTip"> <Setter.Value> <ToolTip> <TextBlock Text="{Binding Age,StringFormat='年龄:{0}超出'}"/> </ToolTip> </Setter.Value> </Setter> <Setter Property="Foreground" Value="Red" /> </DataTrigger> </Style.Triggers> </Style> </Window.Resources>...

<DataTrigger Binding="{Binding Age,Converter={StaticResource AgeConvert},ConverterParameter=22}" Value="True">

上面这句的意思就是Binding了数据Age,转换这个值,对应上面的值转换类,当值大于ConverterParameter传过去的值的时候,做操作。

这个样式就对应了DataGrid中绑定了Age字段的列。

原文地址:http://www.luacloud.com/2011/05/28/datagrid%e6%a0%b9%e6%8d%ae%e5%80%bc%e6%94%b9%e5%8f%98%e8%a1%8c%e6%a0%b7%e5%bc%8f-datatrigger%e8%a7%a6%e5%8f%91%e5%99%a8/

分享给朋友:
您可能感兴趣的文章:
随机阅读: