DataGrid根据值改变行样式-DataTrigger触发器

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

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

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

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

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

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
< 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 。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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页面上。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
< Window x:Class = "dataGrid_binding.MainWindow"
        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 >
...
 
1
< DataTrigger Binding = "{Binding Age,Converter={StaticResource AgeConvert},ConverterParameter=22}" Value = "True" >

上面这句的意思就是Binding了数据Age,转换这个值,对应上面的值转换类,当值大于ConverterParameter传过去的值的时候,做操作。 这个样式就对应了DataGrid中绑定了Age字段的列。

转载于:https://www.cnblogs.com/mei891208/archive/2013/01/25/2877382.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<div style=";text-align:center;;height:auto;" class="datagrid-cell datagrid-cell-c1-checkId">已通过</div></td><td field="button"><div style=";height:auto;" class="datagrid-cell datagrid-cell-c1-button"><a href="#" style="color: red" onclick="fileManager(0)">图片管理</a></div></td><td field="truckNo"><div style=";height:auto;" class="datagrid-cell datagrid-cell-c1-truckNo">辽PD6885</div></td><td field="truckCardColor"><div style=";text-align:center;;height:auto;" class="datagrid-cell datagrid-cell-c1-truckCardColor">黄牌</div></td><td field="vtNam"><div style=";height:auto;" class="datagrid-cell datagrid-cell-c1-vtNam">秦皇岛九福物流有限公司</div></td><td field="driverNam"><div style=";height:auto;" class="datagrid-cell datagrid-cell-c1-driverNam">叶红建</div></td><td field="linkTel"><div style=";height:auto;" class="datagrid-cell datagrid-cell-c1-linkTel">13842929049</div></td><td field="workCompanyCod"><div style=";text-align:center;;height:auto;" class="datagrid-cell datagrid-cell-c1-workCompanyCod">金海粮油</div></td><td field="cargoNam" style="display:none;"><div style=";height:auto;" class="datagrid-cell datagrid-cell-c1-cargoNam"></div></td><td field="consignCod" style="display:none;"><div style=";height:auto;" class="datagrid-cell datagrid-cell-c1-consignCod"></div></td><td field="planDte"><div style=";height:auto;" class="datagrid-cell datagrid-cell-c1-planDte">2023-05-01</div></td><td field="validTyp"><div style=";height:auto;" class="datagrid-cell datagrid-cell-c1-validTyp">当天有效</div></td><td field="ifEnd"><div style=";height:auto;" class="datagrid-cell datagrid-cell-c1-ifEnd">x</div></td><td field="individualId" style="display:none;"><div style=";height:auto;" class="datagrid-cell datagrid-cell-c1-individualId">0</div></td><td field="rejectReason"><div style=";height:auto;" class="datagrid-cell datagrid-cell-c1-rejectReason"></div></td><td field="checkNam"><div style=";height:auto;" class="datagrid-cell datagrid-cell-c1-checkNam">jhly</div></td><td field="checkTim"><div style=";height:auto;" class="datagrid-cell datagrid-cell-c1-checkTim">2023-04-29 21:09</div></td>以上代码为网页源码,帮我写一段python程序从以上代码中找出drivernam和checkTim并保存数据库中
06-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值