以前在用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>

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

WPF 格式化输出- IValueConverter接口的使用 datagrid列中的值转换显示的更多相关文章

  1. WPF 格式化输出- IValueConverter接口的使用

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

  2. 腾讯微博API时间线相关接口返回的微博信息中head值使用问题

    腾讯微博API时间线相关接口返回的微博信息中head值表示作者头像url,这个链接直接访问并不能使用,需要再附加一个参数指定图片的大小(100.50),比如:[head]/100.

  3. 语法注释格式;格式化输出;input在py2和py3中的区别;数据的基本类型;运算符;

    一.Python中的注释 Python的注释是代码的评论,是让代码让人能更加清晰明确.代码的注释可分为单行注释和多行注释,单行注释用“#”,多行注释用三对单引号或者三对双引号来表示. ps:# 单行注 ...

  4. easyui datagrid列中使用tooltip

    要实现这样一个效果:数据加载到DATAGRID中,鼠标移至某一列时,会弹出tooltip提示框. 最初的实现方法: { field: 'Reply', title: '备注', width: 220, ...

  5. DataGrid列中加入CheckBox 全选 点击Header全选 和 只操作选中部分 功能的实现

    先写个效果 中午接着写 反正没人看 只是给自己记录

  6. perl5 第十章 格式化输出

    第十章 格式化输出 by flamephoenix 一.定义打印格式二.显示打印格式三.在打印格式中显示值  1.通用的打印格式  2.格式和局域变量  3.选择值域格式  4.输出值域字符四.输出到 ...

  7. 编写 WPF DataGrid 列模板,实现更好的用户体验

    Julie Lerman 下载代码示例 最近我在为一个客户做一些 Windows Presentation Foundation (WPF) 方面的工作. 虽然我提倡使用第三方工具,但有时也会避免使用 ...

  8. python基础之循环语句,格式化输出以及编码

    1.while循环语句 1.1 常见的几种结构    1. while+判断条件 循环体 2. while+判断条件 循环体 else 语句 tips:while循环如果满足条件的话,会一直循环循环体 ...

  9. Python基础之格式化输出的三种方式

    目录 1. 格式化输出的三种方式 1.1 占位符 1.2 format格式化 1.3 f-string格式化 1. 格式化输出的三种方式 在程序中,需要将输出信息打印成固定的格式,这时候就需要格式化输 ...

随机推荐

  1. go里面的指针用法

    什么是指针 指针是存储一个变量的内存地址的变量. 在上图中,变量 b 的值是 156,存储在地址为 0x1040a124 的内存中.变量 a 存储了变量 b 的地址.现在可以说 a 指向 b. 指针的 ...

  2. vim打开不同的文件

    sp   vim -o file1 file2    纵向打开文件 Ctrl+w Ctrl+v         vim -O file1 file2   横向打开文件

  3. oracle中row_number() over()

    ROW_NUMBER() OVER函数的基本用法语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)简单的说row_number()从1开 ...

  4. 亲测:LNMP环境下,解决项目缓冲慢、502以及配置https的问题

    在做的项目在nginx下访问缓冲时间过长,明显比apache下访问蛮11倍有余, 解决办法: 1增加nginx的upstream,其中upstream中为php-cgi的地址: 2利用nginx作为反 ...

  5. css 如何让背景图片拉伸填充避免重复显示

    如何让背景图片拉伸填充,这个问题听起来似乎很简单.但是很遗憾的告诉大家.不是我们想的那么简单. 比如一个容器(body,div,span)中设定一个背景.这个背景的长宽值在css2.1之前是不能被修改 ...

  6. es6 语法 (函数扩展)

    //函数参数默认值(more值后不能有参数) { function test(x,y = 'world'){ console.log('默认值',x,y); } test('hello');// he ...

  7. Linux禁止ping以及开启ping的方法

    ---恢复内容开始--- Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法P ...

  8. Linux 安装 tomcat

    创建目录 cd /usr mkdir tomcat cd tomcat 上传 tomcat rz.ftp 或者 wget 都可以 解压 tar -xzvf apache-tomcat-8.0.53.t ...

  9. 矢量图面层和线层相交得到相交后的线层文件(gis相交)

    目的:将arcgis里的面层和线层相交(重叠)部分的线单独生成一个shp文件,用于道路路网密度计算等. 注意:进行相交运算后生成的是线要素文件,相当于把面线相交部分的线单独拿了出来. 操作例子:将图示 ...

  10. Git 结合Git使用Bitbucket进行代码版本管理流程规范与实践

    结合Git使用Bitbucket进行代码版本管理流程规范与实践   By:授客 QQ:1033553122   目录 目录 1 一. 测试环境 2 二. 新建项目 2 三. 新建公有版本库 3 四. ...