WPF Type Converter和 IValueConverter

初学者。博客仅做个人的理解整理,不到位的地方欢迎大佬们指出,感谢。

1.类型转换器 TypeConverter

1.1类型转换器是用来干什么的?

在xaml中给控件的属性赋值,后台代码解析这个值并赋值给控件的对应的属性(这个属性肯定是依赖属性了)

如在xaml中写:

 <Border BorderBrush="Red" BorderThickness="3">

xaml里面 BorderBrush的数据是一个字符串类型的,那控件的这个颜色为啥会显示红色,因为有个类型转换器,把string类型,转换成了Brush类型

xaml里面BorderThickness的数据是一个字符串类型的,也会有一个类型转换器把它转换成Thickness类型。

只不过这些转换器都是默认有的,如果我自定义了一个类型,就没法自动转换,这时候就需要自己写一个类型转换器了

到这里应该明白:

1.xaml中属性的数据是字符串类型,需要把它转换成控件需要的类型

2.类型可以是基础类型:int double这种,也可以是一个对象类型:Brush、Thickness、Color等

3.类型转换器是用在依赖属性上的,因为要绑定。

4.

 xaml里面写的数据先经过类型转换器把数据转换好,再赋值给依赖属性

1.2.如何定义?

定义一个新类型(对象): 

public class NewType
        {
            public double width { get; set; }
            public double height { get; set; }
        }

定义类型转换器,继承Type Converter

 定义一个新类型NewType的依赖属性:

 在哪里引用类型转换器?

通过特性在新类型上用

 [TypeConverter(typeof(类型转换器的名字))]
//定义新类型

举个例子:定义一个usercontrol,放一个button,然后在依赖属性上同时设置button的长和宽

 运行:

 2.值转换器 IValueConverter

2.1 什么是 单值IValueConverter  多值IMultiValueConverter

用在binding表达式中,当目标和源数据进行绑定时,两边类型可能不同,这时候需要值转换器,比如 background属性绑定了一个string数据,无法自己 转换的,就要自己处理值转换器

2.2 如何定义

新建类,继承IValueCOnverter,并实现2个接口:

从源数据到界面

Convert

 从界面到数据源

ConvertBack

单值和多值转换器都是这2个接口

public class SingleIvalueConverter : IValueConverter
public class MyMultiValueConverter : IMultiValueConverter

2.3如何使用

在xaml中定义值转换器,并指定key

<Window.Resources>
        <convert:SingleIvalueConverter x:Key="convert1"/>
        <convert:MyMultiValueConverter x:Key="convert2"/>
    </Window.Resources>

在目标属性的binding表达式中引用

<TextBox Name="tb" Text="{Binding test,Converter={StaticResource convert1}}"/>

多值转换器的引用

<TextBox Name="tb1" Text="1"/>
            <TextBox Name="tb2" Text="2"/>
            <TextBox >
                <TextBox.Text>
                    <MultiBinding Converter="{StaticResource convert2 }">
                        <Binding Path="Text" ElementName="tb1"/>
                        <Binding Path="Text" ElementName="tb2"/>
                    </MultiBinding>
                </TextBox.Text>
            </TextBox>

单值转换器

 

 多值转换器

 

3.TypeConvert和IValueConverter的区别

TypeCOnvert是从xaml中的数据到一个依赖属性上时,需要解析采用,如margin=“10,20,30,40”,会解析字符串,传递给对应的属性,不能从属性向xaml传,

IValureConverter是绑定的两端,需要互相转换时用,绑定数据源可以是后台数据,也可以是控件的属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值