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 ...
随机推荐
- 学习Swift--枚举的初步认识 --个人备忘 大神勿喷
枚举定义了一个通用类型的一组相关值,使你可以在你的代码中以一种安全的方式来使用这些值. // 定义枚举的语法 enum Chips { // 定义了薯片的枚举,包含了3种口味的成员 case Toma ...
- 使用URLClassLoader类载入类实例
Tomcat当中在接受到要调用的Servlet请求后,需要载入相应的Servlet类,然后创建Servlet类实例,从而调用Servlet类实例的service()方法 下面实例的场景,request ...
- theano中的concolutional_mlp.py学习
(1) evaluate _lenet5中的导入数据部分 # 导入数据集,该函数定义在logistic_sgd中,返回的是一个list datasets = load_data(dataset) # ...
- NHibernate configuration
http://blog.csdn.net/dbcolor/article/details/2061929
- 我的前端之旅--SeaJs基础和spm编译工具运用[图文]
标签:seajs nodejs npm spm js 1. 概述 本文章来源于本人在项目的实际应用中写下的记录.因初期在安装和使用Seajs和SPM的时候,有点不知所措的经历.为此,我 ...
- java cpu缓存
众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责存数据, 包括程序自身数据. 同样大家都知道, 内存比CPU慢很多. 其实在30年前, CPU的频率和内存总线的频率在同一个级别, ...
- win7+ubuntu双系统安装方法
转自win7+ubuntu双系统安装方法 前段时间又安装一下win7+ubuntu双系统,过段时间就会忘记,这次自己写下来,以便以后查看. 1. 先准备一个分区来安装ubuntu.在win7 ...
- BZOJ 3122 随机数生成器
http://www.lydsy.com/JudgeOnline/problem.php?id=3122 题意:给出p,a,b,x1,t 已知xn=a*xn-1+b%p,求最小的n令xn=t 首先,若 ...
- [原]Hadoop海量视频、图像分析分布式处理总结
在刚刚入手视频图像分析时,有点不知所措,后来经过查找了很多资料.本篇文章主要叙述图像的分析处理,至于视频,实际上视频本身就是一个大文件,hadoop对于大文件处理是高效的,所以在MapReduce的处 ...
- oracle索引再论
ORACLE中索引的数据结构有B树结构和位图结构. 我们通常用的普通索引.反向键索引.函数索引等都是B树结构的,是树状结构:位图结构则只有叶子节点. B树索引操作有唯一性扫描,范围扫描,快速索引全扫描 ...