单值转换器

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

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. HttpRuntime类的缓存以及redis,memercache

    http://www.cnblogs.com/kissdodog/archive/2013/05/07/3065208.html

  2. Codeforces 713 C Sonya and Problem Wihtout a Legend

    Description Sonya was unable to think of a story for this problem, so here comes the formal descript ...

  3. css学习笔记二之inline-block

    1.inline-block是CSS2.1中新增的盒类型,在div中将display属性设定为"inline-block",则div显示效果与设置display属性为"i ...

  4. Android 对话框弹出位置和透明度

    在Android中我们经常会用AlertDialog来显示对话框.通过这个对话框是显示在屏幕中心的.但在某些程序中,要求对话框可以显示在不同的位置.例如,屏幕的上方或下方.要实现这种效果.就需要获得对 ...

  5. jstat命令(Java Virtual Machine Statistics Monitoring Tool)

    1.介绍 Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控: - 类的加载及卸载情况 - 查看新生代.老生代及持久代 ...

  6. latch free

    latch free 等待事件: latch: cache buffers chains 这个等待事件其实还有另外一个重要的原因,那么就是逻辑读太高,SQL执行计划走错了导致的. 当进程想要获取锁存器 ...

  7. 开源网络备份软件 bacula 的安装、配置和运行

    安装bacula 1 bacula的几种网络备份拓扑 前面文章介绍了bacula有5个组成部分,在实际的应用中,没有必要将5个部分分别放在不同的服务器上,它们之间的某些部分是可以合并的,常见的bacu ...

  8. 【转】Android ROM研究---Android build system增加模块

    原文网址:http://hualang.iteye.com/blog/1141315 Android build system就是编译系统的意思 在我们需要向自己编译的源代码中增加模块的时候,需要一些 ...

  9. android获取设备屏幕大小的方法

    // 通过WindowManager获取 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay( ...

  10. 【转】 U3D DrawCall优化手记 - 夜阑卧听风吹雨

     原文  http://www.cnblogs.com/ybgame/p/3588795.html 在最近,使用U3D开发的游戏核心部分功能即将完成,中间由于各种历史原因,导致项目存在比较大的问题,这 ...