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>
这样就实现了前台根据数据中的整数 显示不同的职称。
WPF 格式化输出- IValueConverter接口的使用 datagrid列中的值转换显示的更多相关文章
- WPF 格式化输出- IValueConverter接口的使用
以前在用ASP.NET 做B/S系统时,可以方便地在GRIDVIEW DATAList等数据控件中,使用自定义的代码逻辑,比如 使用 <%# GetBalance(custID) %> 这 ...
- 腾讯微博API时间线相关接口返回的微博信息中head值使用问题
腾讯微博API时间线相关接口返回的微博信息中head值表示作者头像url,这个链接直接访问并不能使用,需要再附加一个参数指定图片的大小(100.50),比如:[head]/100.
- 语法注释格式;格式化输出;input在py2和py3中的区别;数据的基本类型;运算符;
一.Python中的注释 Python的注释是代码的评论,是让代码让人能更加清晰明确.代码的注释可分为单行注释和多行注释,单行注释用“#”,多行注释用三对单引号或者三对双引号来表示. ps:# 单行注 ...
- easyui datagrid列中使用tooltip
要实现这样一个效果:数据加载到DATAGRID中,鼠标移至某一列时,会弹出tooltip提示框. 最初的实现方法: { field: 'Reply', title: '备注', width: 220, ...
- DataGrid列中加入CheckBox 全选 点击Header全选 和 只操作选中部分 功能的实现
先写个效果 中午接着写 反正没人看 只是给自己记录
- perl5 第十章 格式化输出
第十章 格式化输出 by flamephoenix 一.定义打印格式二.显示打印格式三.在打印格式中显示值 1.通用的打印格式 2.格式和局域变量 3.选择值域格式 4.输出值域字符四.输出到 ...
- 编写 WPF DataGrid 列模板,实现更好的用户体验
Julie Lerman 下载代码示例 最近我在为一个客户做一些 Windows Presentation Foundation (WPF) 方面的工作. 虽然我提倡使用第三方工具,但有时也会避免使用 ...
- python基础之循环语句,格式化输出以及编码
1.while循环语句 1.1 常见的几种结构 1. while+判断条件 循环体 2. while+判断条件 循环体 else 语句 tips:while循环如果满足条件的话,会一直循环循环体 ...
- Python基础之格式化输出的三种方式
目录 1. 格式化输出的三种方式 1.1 占位符 1.2 format格式化 1.3 f-string格式化 1. 格式化输出的三种方式 在程序中,需要将输出信息打印成固定的格式,这时候就需要格式化输 ...
随机推荐
- go里面的指针用法
什么是指针 指针是存储一个变量的内存地址的变量. 在上图中,变量 b 的值是 156,存储在地址为 0x1040a124 的内存中.变量 a 存储了变量 b 的地址.现在可以说 a 指向 b. 指针的 ...
- vim打开不同的文件
sp vim -o file1 file2 纵向打开文件 Ctrl+w Ctrl+v vim -O file1 file2 横向打开文件
- oracle中row_number() over()
ROW_NUMBER() OVER函数的基本用法语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)简单的说row_number()从1开 ...
- 亲测:LNMP环境下,解决项目缓冲慢、502以及配置https的问题
在做的项目在nginx下访问缓冲时间过长,明显比apache下访问蛮11倍有余, 解决办法: 1增加nginx的upstream,其中upstream中为php-cgi的地址: 2利用nginx作为反 ...
- css 如何让背景图片拉伸填充避免重复显示
如何让背景图片拉伸填充,这个问题听起来似乎很简单.但是很遗憾的告诉大家.不是我们想的那么简单. 比如一个容器(body,div,span)中设定一个背景.这个背景的长宽值在css2.1之前是不能被修改 ...
- es6 语法 (函数扩展)
//函数参数默认值(more值后不能有参数) { function test(x,y = 'world'){ console.log('默认值',x,y); } test('hello');// he ...
- Linux禁止ping以及开启ping的方法
---恢复内容开始--- Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任意一个禁Ping就无法P ...
- Linux 安装 tomcat
创建目录 cd /usr mkdir tomcat cd tomcat 上传 tomcat rz.ftp 或者 wget 都可以 解压 tar -xzvf apache-tomcat-8.0.53.t ...
- 矢量图面层和线层相交得到相交后的线层文件(gis相交)
目的:将arcgis里的面层和线层相交(重叠)部分的线单独生成一个shp文件,用于道路路网密度计算等. 注意:进行相交运算后生成的是线要素文件,相当于把面线相交部分的线单独拿了出来. 操作例子:将图示 ...
- Git 结合Git使用Bitbucket进行代码版本管理流程规范与实践
结合Git使用Bitbucket进行代码版本管理流程规范与实践 By:授客 QQ:1033553122 目录 目录 1 一. 测试环境 2 二. 新建项目 2 三. 新建公有版本库 3 四. ...