WPF真入门教程25--Converter转换器

WPF的Binding机制给程序的开发带来极大方便,但有时源数据和绑定对象之间需要进行一定的逻辑转换,直接的简单绑定不能满足使用要求,WPF当然考虑了这一点,在Binding中我们可以添加自定义的转换逻辑,即转换器Converter。WPF中的转换器是一个非常好的数据类型转换解决方案,实用和强大, 它的作用是将源数据转换为WPF自身需要的类型,对数据实体没有侵略性,会在项目工程中频繁使用。所以掌握转换器是WPF开发的必备技能。

比如DateTime类型的时间转换为yyyyMMdd的日期,还比如要将0,1转换成男,女,这种情况下,就需要定制自己的Converter。

.Net Framework提供了两种Converter接口,单值转换的接口IValueConverter和多值转换的接口IMultiValueConverter,它们都属于System.Windows.Data命名空间,在程序集PresentationFramework.dll中。这两种值转换器都是分区域性的。其中方法Convert和ConvertBack都具有指示区域性信息的culture参数。如果区域性信息与转换无关,那么在自定义转换器中可以忽略该参数。下面来看下具体操作

一、单值转换器IValueConverter

1、在项目中control文件夹创建一个窗口文件ConverterWin.xaml,并在启动文件app.xaml修改启动文件为ConverterWin.xaml

2、在项目的common文件夹中添加一个类TimeConverter,意为时间转换器类,代码是:

WPF真入门教程25--Converter转换器_第1张图片

 3、在ConverterWin.xaml文件里添加控件,并导入命名空间,设置资源,具体代码是:


    
    
        
    
    
        
        
        
        

4、运行程序,效果是:

WPF真入门教程25--Converter转换器_第2张图片

这个就是单值转换器,看到效果可以理解吧!

 二、多值转换器IMultiValueConverter

多值转换器IMultiValueConverter意思是指可以转换多值的数据源,它需要继承IMultiValueConverter接口,接口使用和IValueConverter逻辑相同。我们要操作的例子是:当纵向流量大于横向流量时指示灯应为绿色,当纵向流量小于横向流量时指示灯应为红色,否则指示灯为黄色。

1、在common文件夹中添加类ColorConverter,代码是:

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
using System.Windows.Media;

namespace WpfApp6.common
{
    public class ColorConverter : IMultiValueConverter
    {
        //当值从绑定源传播给绑定目标时,values是一个数组
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            if (values == null || values.Length <0 )
            {
                return DependencyProperty.UnsetValue;//返回没有设置属性值
            } 
            double verValue = (double)values[0];//获取数组中的第一个参数,即sliderVer控件的值
            double horValue = (double)values[1];//获取sliderHor控件的值
            if (verValue > horValue)
            {
                return new SolidColorBrush(Colors.Green);
            }
               
            else if (verValue < horValue)
            {
                return new SolidColorBrush(Colors.Red);
            } 
            return new SolidColorBrush(Colors.Yellow);
        }
        //反向修改
        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            //返回空,标记不可双向转换
            return null;
        }
    }
}

2、在ConverterWin.xaml文件中添加标签控件2个,滑动控件2个,圆控件1个,完整代码是:


    
    
        
        
    
    
        
        
        
        

3、运行程序:

WPF真入门教程25--Converter转换器_第3张图片

 拖动纵向值,这时纵向值比横向值大,所以填充绿色,

WPF真入门教程25--Converter转换器_第4张图片

 拖动横向值滑动条,当超过纵向值时,填充的是红色,效果是

WPF真入门教程25--Converter转换器_第5张图片

 这就是多值转换器里的代码进行判断生效的。WPF真入门教程25--Converter转换器_第6张图片

 

转换器作用:可以将源数据和目标数据之间进行特定的转化

还是蛮帅的,变变声。

你可能感兴趣的:(WPF真入门教程,wpf)