单值转换器

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

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的更多相关文章

  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. Welcome to JimmyCheung's blog!

    博客开通,写写学习笔记,写写心情,写写生活中的点点滴滴~ 有钱的捧个钱场嘞,没钱的贡献个点击量,新鲜的博客出炉咯,来五毛钱的博文呗~ By Jimmy 2014.09.16

  2. C#Lambda表达式学习日记

    Lambda表达式只是用更简单的方式来写匿名方法,彻底简化了对.NET委托类型的使用. 现在,如果我们要使用泛型 List<> 的 FindAll() 方法,当你从一个集合去提取子集时,可 ...

  3. java简单字符串处理

    在实际的开发工作中,对字符串的处理是最常见的编程任务. 本题目即是要求程序对用户输入的串进行处理.具体规则如下: 1. 把每个单词的首字母变为大写. 2. 把数字与字母之间用下划线字符(_)分开,使得 ...

  4. java项目创建和部署

    http://www.cnblogs.com/nexiyi/archive/2012/12/28/2837560.html http://dead-knight.iteye.com/blog/1841 ...

  5. javascript学习代码--点击按钮显示内容

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 投稿前必备的cover letter

  7. Prince and Princess

    hdu4685:http://acm.hdu.edu.cn/showproblem.php?pid=4685 题意:有n个王子和m个公主,每个王子都会喜欢若干个公主,也就是王子只跟自己喜欢的公主结婚公 ...

  8. Cow Contest

    poj3660:http://poj.org/problem?id=3660 题意:一些奶牛之间进行编程比赛,每头牛都有一个编程能力.如果a的能力比b的能力高,则a总能打败b .现在给你一些牛之间的比 ...

  9. jps命令(Java Virtual Machine Process Status Tool)

    1.介绍 用来查看基于HotSpot的JVM里面中,所有具有访问权限的Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过jps是用来显示java进程, ...

  10. 14.5.4 Phantom Rows 幻影行

    14.5.4 Phantom Rows 幻影行 所谓的幻读问题发生在一个事务 当相同的查询产生不同的结果集在不同的时间. 例如,如果一个SELECT 是执行2次,但是第2次返回的时间不第一次返回不同, ...