• 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是绑定的两端,需要互相转换时用,绑定数据源可以是后台数据,也可以是控件的属性

  • 相关阅读:
    HDU 4924 Football Manager(状压DP)
    android 为图片去灰
    关于invalidate和postInvalidate
    有点感想人月神话
    ObjectiveC语法快速参考
    Paint类 主要方法介绍
    关于游戏开发中的碰撞检测(转)
    两集合求交集的算法比较(转)
    Java编程中“为了性能”需做的26件事(转)
    android WebView总结(转)
  • 原文地址:https://www.cnblogs.com/1024E/p/15732929.html
Copyright © 2020-2023  润新知