• WPF 格式化输出- IValueConverter接口的使用 datagrid列中的值转换显示


    以前在用ASP.NET 做B/S系统时,可以方便地在GRIDVIEW DATAList等数据控件中,使用自定义的代码逻辑,比如

    使用 <%# GetBalance(custID) %> 这样的调用, GetBalance()为在codebehind类中定义的方法;

    在WPF应用程序中有时也有类似的需求,比如数据库表Teacher中有一个字段 Title ,int 类型,取值为1-5,分别对应讲师  研究员 高工  副教授 教授 。在wpf窗口中需要直接显示 讲师 研究员 类似的文字,而不是一个1-5的数字,从界面设计的角度 ,用文字来表示职称是最自然的方式。因此在数据绑定的时候需要将整数转换为对应的文本职称。 但是WPF没有象ASP。NET那样的绑定表达式用法;该怎么办呢?

    WPF框架提供了一个IValueConverter接口,负责数据源到数据控件绑定时,自定义转换逻辑。使用它包括以下步骤:

    1.创建一个只转换器类,实现该接口;

    2.给该类加入ValueConversion属性,并制定源类型和目标类型;

    3.实现该接口的两个方法,Convert()与ConvertBack()

    4.按照1-3创建类之后,在数据绑定控件中,设定Converter为该类的一个实例;

    具体要完成上述功能:

    1.首先创建实现 IValueConverter的类:

    //指定转换器源类型和目标类型

     [ValueConversion(typeof(int), typeof(string))]
       public class TitleConverter:IValueConverter
        {

          

           //实现接口的两个方法
            #region IValueConverter 成员

            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                int titleInt = (int)value;
                string titleStr = string.Empty;
                switch (titleInt)
                {
                    case 5:
                        titleStr = "教授";
                        break;
                    case  4:
                        titleStr = "副教授";
                        break;
                    case 3:
                        titleStr = "高工";
                        break;
                    case 2:
                        titleStr = "研究员";
                        break;
                    case 1:
                        titleStr = "讲师";
                        break;
               
                }


                return titleStr;
            }

            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                string titleStr = value.ToString();
                int titleInt = 0;
                switch (titleStr)
                {
                    case "教授":
                        titleInt = 5;
                        break;
                    case "副教授":
                        titleInt = 4;
                        break;
                    case "高工":
                        titleInt = 3;
                        break;
                    case "研究员":
                        titleInt = 2;
                        break;
                    case "讲师":
                        titleInt = 1;
                        break;
               
               
                }

                return titleInt;
            }

            #endregion
        }

    2.前台调用

    首先需要在窗口中声明转换器类名称空间 并定义一个转换器资源

    <Window x:Class="EvalStarServer.UserManage"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:EvalStarServer.BLL"
            Title="UserManage" >
        <Window.Resources>
            <local:TitleConverter x:Key="myTitleConverter"></local:TitleConverter>
        </Window.Resources>

    <DataGrid Name="gdEvaluator" CanUserAddRows="False">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="姓名" Binding="{Binding Path=Name}"></DataGridTextColumn>                 
                        <DataGridTextColumn Header="职称" Binding="{Binding Path=Elevel,Converter={StaticResource myTitleConverter}}"></DataGridTextColumn>
                        <DataGridTextColumn Header="编号" Binding="{Binding Path=Eno}"></DataGridTextColumn>
                        <DataGridTemplateColumn Header="操作">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <Button Tag="{Binding Path=ID}"  Click="OnDeleteEvl">删除</Button>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                    </DataGrid.Columns>
                </DataGrid>

    </Windows>

    这样就实现了前台根据数据中的整数 显示不同的职称。

  • 相关阅读:
    java虚拟机理解探索1
    Java线程面试题 Top 50(转载)
    (转载)浅谈我对DDD领域驱动设计的理解
    最大堆
    利用筛法求质数
    递归算法及优化
    java 根据传入的时间获取当前月的第一天的0点0分0秒和最后一天的23点59分59秒
    Uncaught Error: Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3
    mysql 子查询问题
    微信7.0以后更新后H5页面定位不准确
  • 原文地址:https://www.cnblogs.com/yelanggu/p/10444656.html
Copyright © 2020-2023  润新知