以前在用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接口的使用的更多相关文章

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

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

  2. WPF中任意Object的XAML代码格式化输出

    原文:WPF中任意Object的XAML代码格式化输出 有时候,我们需要将WPF中的控件自身的XAML代码输出成文本,那么,我们可以使用System.Windows.Markup.XamlWriter ...

  3. Python自动化运维之4、格式化输出、文件对象

    Python格式化输出: Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[P ...

  4. 格式化输出io:format的奇技淫巧

    格式化输出io:format是我接触Erlang使用的第一个库函数(io:format("Hello World")),随着学习的深入,它也是我debug优先选择最简单直接的工具. ...

  5. python基础_格式化输出(%用法和format用法)

      目录 %用法 format用法 %用法 1.整数的输出 %o —— oct 八进制%d —— dec 十进制%x —— hex 十六进制 1 >>> print('%o' % 2 ...

  6. golang格式化输出-fmt包用法详解

    golang格式化输出-fmt包用法详解 注意:我在这里给出golang查询关于包的使用的地址:https://godoc.org    声明: 此片文章并非原创,大多数内容都是来自:https:// ...

  7. Python实例1—格式化输出

    老男孩教学学习笔记: 实例1:格式化输出 # Author:Alex Li name = input("name:") # raw_input 2.x input 3.x # in ...

  8. (Go)06. Printf格式化输出、Scanf格式化输入详解

    Print.Println .Printf .Sprintf .Fprintf都是fmt 包中的公共方法,在需要打印信息时需要用到这些函数,那么这些函数有什么区别呢? Print: 输出到控制台(不接 ...

  9. python基础1 格式化输出

    转载自:https://www.cnblogs.com/fat39/p/7159881.html %用法 1.整数输出 %o —— oct 八进制%d —— dec 十进制%x —— hex 十六进制 ...

随机推荐

  1. qt 原子操作 QAtomicInt(++和--都不是原子操作:都包含三条机器指令)

    ++和--都不是原子操作:都包含三条机器指令 http://sroply.blog.163.com/blog/static/17092651920106117251539/

  2. 最好的程序员都是行动派(成功者不是那些明知赚钱之法还要推三阻四的人。成功者知道轻重缓急,善于把握今天) good

    我相信,所有程序员都需要在下面两点之间找到一个良好的平衡: 1.把自己关在一间私密的办公室里,针对你的程序与编译器展开一次亲密对话. 2.出入公众场合,与其他人公开谈论你的程序. 关于这个话题,我已经 ...

  3. VS2010引用项目dll,编译时报错

    截图出处:http://www.cnblogs.com/wuhuisheng/archive/2012/02/13/2349754.html

  4. Linux之sed详解

    转载:http://blog.chinaunix.net/u/22677/showart_1076318.html   1.简介 sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保 ...

  5. Mysql技术内幕-笔记-第二章 数据类型

    第二章 数据类型 Mysql中尽量不要使用UNSIGNED,因为可能会带来一些意想不到的效果 SHOW CREATE TABLE tablename\G;查看表的创建语句 ZEROFILL会将宽度小于 ...

  6. Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门

    说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...

  7. CUDA编程-(2)其实写个矩阵相乘并不是那么难

    程序代码及图解析: #include <iostream> #include "book.h" __global__ void add( int a, int b, i ...

  8. Genotype&&陨石的秘密

    Genotype: Genotype 是一个有限的基因序列.它是由大写的英文字母A-Z组成,不同的字母表示不同种类的基因.一个基因可以分化成为一对新的基因.这种分化被一个定义的规则集合所控制.每个分化 ...

  9. ios UI 之间的切换方法,using prepareForSegue and not

    1, use prepareForSegue: - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { RWTDe ...

  10. 问题-安装XP时,提示不识别SATA硬盘

    问题现象:笔记本装XP时,系统提示硬盘不能被识别? 问题描述:我原来是vista版本的,硬盘是SATA接口,但我觉得用vista不习惯,所以想装XP,可后来发现机器无法识别硬盘,该怎么解决? 问题原因 ...