WPF 格式化输出- IValueConverter接口的使用
来源:互联网 发布:hp1108打印机驱动mac 编辑:程序博客网 时间:2024/04/29 00:58
以前在用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>
这样就实现了前台根据数据中的整数 显示不同的职称。
使用 <%# 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>
这样就实现了前台根据数据中的整数 显示不同的职称。
0 0
- WPF 格式化输出- IValueConverter接口的使用
- C#WPF 格式化输出- IValueConverter接口的使用 Convert和ConvertBack
- wpf之IValueConverter接口
- WPF 使用值转换器进行绑定数据的转换IValueConverter
- IValueConverter的使用
- WPF进阶之接口(1):IValueConverter,IMultiValueConverter
- WPF进阶之接口(1):IValueConverter,IMultiValueConverter
- 两个重要的接口:INotifyPropertychanged和IValueConverter
- IValueConverter 数据格式化处理
- IValueConverter 数据格式化处理(二):MultiBinding的应用
- IValueConverter 接口实现
- wpf值转换器IValueConverter例子
- WPF中绑定转换IValueConverter
- WPF-16:IValueConverter简单用法
- 【转】【WPF】IvalueConverter和TypeConverter
- WPF中任意Object的XAML代码格式化输出
- Silverlight渐进学习系列(1)——IValueConverter的使用
- Silverlight渐进学习系列(1)——IValueConverter的使用
- Linux本地yum源配置
- svn使用中的一些问题总结(结合svnadmin3.0.5)
- MongoDB基本命令
- LeetCode 237. Delete Node in a Linked List 解题报告
- 异常汇总
- WPF 格式化输出- IValueConverter接口的使用
- 欢迎使用CSDN-markdown编辑器
- Java8 - HashMap源码
- jquery引用后效果不显示问题
- 插入排序和希尔排序-面试的希尔排序原来这么简单
- 树莓派之外网访问
- Android NDK环境搭建
- 输入文本匹配内容AutoCompleteTextView的使用
- PTAM源码在Windows下的编译(附工程和库文件)