WPF converter
单值转换器
将单一值转换为特定类型的值,以日期转换为例如下:
1、定制DateConverter类,其中当值从绑定源传播给绑定目标时,调用方法Convert。

1 public class DateConverter : IValueConverter 2 { 3 public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 4 { 5 return ((DateTime)value).ToString("yyyy/MM/dd"); 6 } 7 8 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 9 {10 return null;11 }12 }

当值从绑定目标传播给绑定源时,调用此方法ConvertBack,方法ConvertBack的实现必须是方法Convert的反向实现。例如下:

1 public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 2 { 3 DateTime date = (DateTime)value; 4 return date.ToShortDateString(); 5 } 6 7 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 8 { 9 string strValue = value as string;10 DateTime resultDateTime;11 if (DateTime.TryParse(strValue, out resultDateTime))12 {13 return resultDateTime;14 }15 return DependencyProperty.UnsetValue;16 }

返回值DependencyProperty.UnsetValue表示转换器没有生成任何值。但是通常情况下方法ConvertBack没有方法Convert常用,这里不做过多介绍。
2、在xmal文件引用DateConverter类所在命名空间。
1 xmlns:cvt="clr-namespace:ValueConverterDemo.Converter"
3、在xaml文件添加Resources。
1 <Window.Resources>2 <cvt:DateConverter x:Key="cvtDate"/>3 </Window.Resources>
4、在xaml文件中指定Binding值的Converter
1 Text="{Binding CurrentDate, Converter={StaticResource cvtDate}}"
效果如下图,图中“时间”是未经过转换的原始DateTime类型,“日期”经过转换处理后只显示日期部分。
多值转换器
将多组值转换为特定类型的值,以纵横流量影响交通指示灯颜色的变化为例如下:
当纵向流量大于横向流量时指示灯应为绿色,当纵向流量小于横向流量时指示灯应为红色,否则指示灯为黄色。
1、定制ColorConverter类,此时Convert中参数是object[] values,values[0]对应MultiBinding中的第一个Binding值,这里是纵向流量值,依此类推,可以在MultiBinding对象中指定多个绑定。

1 public class ColorConverter : IMultiValueConverter 2 { 3 public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 4 { 5 double verValue = (double)values[0]; 6 double horValue = (double)values[1]; 7 if (verValue > horValue) 8 { 9 return new SolidColorBrush(Colors.Green);10 }11 else if (verValue < horValue)12 {13 return new SolidColorBrush(Colors.Red);14 }15 return new SolidColorBrush(Colors.Yellow);16 }17 18 public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)19 {20 return null;21 }22 }

2、3步同单值转换。
4、xmal文件中指定定制的Converter,此时需要使用的MultiBinding来指定多组Binding。
1 <MultiBinding Converter="{StaticResource cvtColor}">2 <Binding Path="Value" ElementName="slVer"/>3 <Binding Path="Value" ElementName="slHor"/>4 </MultiBinding>
效果如下图交通灯的颜色是根据纵向流量和横向流量的关系而变化的。
- 纵向流量大于横向流量
- 纵向流量小于横向流量
- 纵向流量等于横向流量
WPF Converter 使用复杂参数的方法
Step 1
在WPF的C#代码文件中给定义复杂类型的变量,并给其赋值;
Sample code: List<User>lsUser=。。。。
Setp 2
在 C#代码对应的XAML 中将此复杂参数定义为资源;
Sample code:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:SDKSample"
x:Class="SDKSample.Window1"
Width="400"
Height="280"
Title="MultiBinding Sample">
<Window.Resources>
<c:lsUser x:Key="userList"/>
...
</Window.Resources>
这里的命名空间 C 是你的复杂参数所在的命名空间;
Step 3
<UserControl.Resources>
<app:UserManager x:Key="StaticUsers"/>
<app:UserNameConverter x:Key="UsrConverter"/>
</UserControl.Resources>
<TextBox Text="{Binding XXXX,Converter={StaticResource UsrConverter},
ConverterParameter={StaticResource userList }}" />
Step 4 Converter 里对参数的使用
public class UserNameConverter : IValueConverter
{
public object IValueConverter.Convert(object value, Type targetType,object parameter, CultureInfo culture)
{
List<User> usrs = parameter as List<User>;
...
}
}
WPF converter的更多相关文章
- WPF converter(包含传递复杂参数)
单值转换器 将单一值转换为特定类型的值,以日期转换为例如下: 1.定制DateConverter类,其中当值从绑定源传播给绑定目标时,调用方法Convert. 1 public class DateC ...
- WPF Converter 使用复杂参数的方法
Step 1在WPF的C#代码文件中给定义复杂类型的变量,并给其赋值:Sample code: List<User>lsUser=....Setp 2在 C#代码对应的XAML 中将此复杂 ...
- WPF Converter(转)
WPF Binding 用于数据有效性校验的关卡是它的 ValidationRules 属性,用于数据类型转换的关卡是它的 Converter 属性.下面是实例: 1. Binding 的数据校验 & ...
- wpf converter converterparameter 绑定多参数
1. converterparameter不是依赖属性,所以不能用binding. 2. 可以把converter 的接口 IValueConverter改为 IMultiValueConverter ...
- [WPF 容易忽视的细节] —— Exception in WPF's Converter
前言: 在WPF中,Converter是我们经常要用到的一个工具,因为XAML上绑定的数据不一定是我们需要的数据. 问题: 在Converter中抛出一个异常导致程序崩溃,而且是在对未捕获异常进行集中 ...
- Silverlight或WPF动态绑定图片路径问题,不用Converter完美解决
关于Silverlight或WPF动态绑定图片路径问题,不用Converter完美解决, 可想,一个固定的字符串MS都能找到,按常理动态绑定也应该没问题的,只需在前面标记它是一个Path类型的值它就能 ...
- WPF 之Converter
WPF 之Converter Leo 在我们做项目的时候,经常会遇见这样的事情: 在数据中我们定义的是true,false 而在现实的时候则可能要求男,女 我们还得能定义成了0,1,2,3,4,5, ...
- 【WPF】wpf用MultiBinding解决Converter需要动态传参的问题,以Button为例
原文:[WPF]wpf用MultiBinding解决Converter需要动态传参的问题,以Button为例 用Binding并通过Converter转换的时候,可能偶尔会遇到传参的问题, ...
- WPF的DataGrid的某个列绑定数据的三种方法(Binding、Converter、DataTrigger)
最近在使用WPF的时候,遇到某个列的值需要根据内容不同进行转换显示的需求.尝试了一下,大概有三种方式可以实现: 1.传统的Binding方法,后台构造好数据,绑定就行. 2.转换器方法(Convert ...
随机推荐
- mvc4 to mvc5 and EF5 to EF6
今天把 后台的mvc 升级到了mvc5和ef6 .出错很正常. 下面是一些错误信息. [A]System.Web.WebPages.Razor.Configuration.HostSection 无法 ...
- Data guard RAC配置【二】
2. 利用duplicate配置容灾端 1.配置容灾端oracle用户的环境变量,这里以192.166.1.61为例. export ORACLE_BASE=/opt/oracle export OR ...
- Phonegap 3.0 获取当前地址位置
新版本的cordova 3.0 中,使用官方的示例可直接获取当前手机的地理位置,前提是手机开启了gps,或可联网. 获取到的是经纬度坐标值等信息,可通过google api 实现通过经纬度获取当前地理 ...
- navBar
改变NavgationBar的颜色: [[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]]; 改变NavgationB ...
- prototype.js 源码解读(02)
如果你想研究一些比较大型的js框架的源码的话,本人建议你从其最初的版本开始研读,因为最初的版本东西少,易于研究,而后的版本基本都是在其基础上不断扩充罢了,所以,接下来我不准备完全解读prototype ...
- Minimal Ratio Tree
hdu2489:http://acm.hdu.edu.cn/showproblem.php?pid=2489 题意:给你一个n个节点图,图的点有边权和点权,然后选取m个节点的子图,然后求这个一棵树,然 ...
- Qt动画与Qt坐标小记
Qt动画 转载自: <http://jingyan.baidu.com/article/154b46315757b628ca8f4116.html> 和 <http://blog. ...
- 14.8.2 Role of the .frm File for InnoDB Tables InnoDB 表得到 .frm文件的作用
14.8.2 Role of the .frm File for InnoDB Tables InnoDB 表得到 .frm文件的作用 Vsftp:/data01/mysql/zjzc# ls -lt ...
- C# 哈希表的实现
8.4.2 Hashtable的代码实现 哈希表的实现较为复杂,为了简化代码,本例忽略了部分出错判断,在测试时请不要设key值为空. 1 using System; 2 public clas ...
- [LeetCode#276] Paint Fence
Problem: There is a fence with n posts, each post can be painted with one of the k colors. You have ...