单值转换器

将单一值转换为特定类型的值,以日期转换为例如下:

1、定制DateConverter类,其中当值从绑定源传播给绑定目标时,调用方法Convert。

  1. 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. 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. 1 xmlns:cvt="clr-namespace:ValueConverterDemo.Converter"

3、在xaml文件添加Resources。

  1. 1 <Window.Resources>2 <cvt:DateConverter x:Key="cvtDate"/>3 </Window.Resources>

4、在xaml文件中指定Binding值的Converter

  1. 1 Text="{Binding CurrentDate, Converter={StaticResource cvtDate}}"

效果如下图,图中“时间”是未经过转换的原始DateTime类型,“日期”经过转换处理后只显示日期部分。

    

多值转换器

将多组值转换为特定类型的值,以纵横流量影响交通指示灯颜色的变化为例如下:

当纵向流量大于横向流量时指示灯应为绿色,当纵向流量小于横向流量时指示灯应为红色,否则指示灯为黄色。

1、定制ColorConverter类,此时Convert中参数是object[] values,values[0]对应MultiBinding中的第一个Binding值,这里是纵向流量值,依此类推,可以在MultiBinding对象中指定多个绑定。

  1. 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. 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:

  1. <Window
  1.   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  1.   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  1.   xmlns:c="clr-namespace:SDKSample"
  1.   x:Class="SDKSample.Window1"
  1.   Width="400"
  1.   Height="280"
  1.   Title="MultiBinding Sample">
  1.        
  1.   <Window.Resources>
  1.     <c:lsUser x:Key="userList"/>
  1. ...
  1.  
  1. </Window.Resources>
  1.  
  1. 这里的命名空间 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的更多相关文章

  1. WPF converter(包含传递复杂参数)

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

  2. WPF Converter 使用复杂参数的方法

    Step 1在WPF的C#代码文件中给定义复杂类型的变量,并给其赋值:Sample code: List<User>lsUser=....Setp 2在 C#代码对应的XAML 中将此复杂 ...

  3. WPF Converter(转)

    WPF Binding 用于数据有效性校验的关卡是它的 ValidationRules 属性,用于数据类型转换的关卡是它的 Converter 属性.下面是实例: 1. Binding 的数据校验 & ...

  4. wpf converter converterparameter 绑定多参数

    1. converterparameter不是依赖属性,所以不能用binding. 2. 可以把converter 的接口 IValueConverter改为 IMultiValueConverter ...

  5. [WPF 容易忽视的细节] —— Exception in WPF's Converter

    前言: 在WPF中,Converter是我们经常要用到的一个工具,因为XAML上绑定的数据不一定是我们需要的数据. 问题: 在Converter中抛出一个异常导致程序崩溃,而且是在对未捕获异常进行集中 ...

  6. Silverlight或WPF动态绑定图片路径问题,不用Converter完美解决

    关于Silverlight或WPF动态绑定图片路径问题,不用Converter完美解决, 可想,一个固定的字符串MS都能找到,按常理动态绑定也应该没问题的,只需在前面标记它是一个Path类型的值它就能 ...

  7. WPF 之Converter

    WPF  之Converter Leo 在我们做项目的时候,经常会遇见这样的事情: 在数据中我们定义的是true,false 而在现实的时候则可能要求男,女 我们还得能定义成了0,1,2,3,4,5, ...

  8. 【WPF】wpf用MultiBinding解决Converter需要动态传参的问题,以Button为例

    原文:[WPF]wpf用MultiBinding解决Converter需要动态传参的问题,以Button为例       用Binding并通过Converter转换的时候,可能偶尔会遇到传参的问题, ...

  9. WPF的DataGrid的某个列绑定数据的三种方法(Binding、Converter、DataTrigger)

    最近在使用WPF的时候,遇到某个列的值需要根据内容不同进行转换显示的需求.尝试了一下,大概有三种方式可以实现: 1.传统的Binding方法,后台构造好数据,绑定就行. 2.转换器方法(Convert ...

随机推荐

  1. div+css知识点(2)

    文字溢出 显示省略号的 关键的三句代码text-overflow:ellipsis; -o-text-overflow:ellipsis; overflow:hidden;文字缩进的代码是什么text ...

  2. Tomcat,Weblogic,WebSphere,JBoss四种服务器简单对比

    1,tomcat是Servlet容器,支持JSP.Servlet.JDBC等J2EE关键技术,常用于tomcat开发基于数据库.Servlet和JSP页面的Web应用.2,tomcat不是EJB容器, ...

  3. bzoj 1005: [HNOI2008]明明的烦恼 prufer编号&&生成树计数

    1005: [HNOI2008]明明的烦恼 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2248  Solved: 898[Submit][Statu ...

  4. Party

    hdu3062:http://acm.hdu.edu.cn/showproblem.php?pid=3062 题意:中文题. 题解:很明显的2-sat.然后要深刻理解命题和逆否命题.如这一题,c1,c ...

  5. MockupBuilder

    玩一下,想起了以前公司产品经理作的些事了...

  6. dotfuscator使用方法

    dotfuscator如何对.net程序进行混淆保护对于程序代码的保护,网上有很多资料,有的说混淆,有的说加密,我比较支持混淆的方法,这样可以让反编译劳工,头晕一阵子,哈哈开玩笑.对于加密如果不是不得 ...

  7. HDOJ 1995 汉诺塔V

    Problem Description 用1,2,-,n表示n个盘子,称为1号盘,2号盘,-.号数大盘子就大.经典的汉诺塔问 题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔 ...

  8. JavaScript高级程序设计5.pdf

    队列方法访问规则是FIFO(First-In-First-Out,先进先出),数组方法shift()能够移除数组中第一个项并返回该项,同时将数组长度减1,结合使用shift()和push(),可以像队 ...

  9. Cogs 1583. [POJ3237]树的维护 LCT,树链剖分

    题目:http://cojs.tk/cogs/problem/problem.php?pid=1583 1583. [POJ3237]树的维护 ★★★☆   输入文件:maintaintree.in  ...

  10. awk替换第几行第几列的值

    代码如下: awk '{if(2==NR){gsub(/.*/, 300, $5)}print}' list.txt 将文件list.txt的第2行第5列的值替换为300