• WPF中在XAML中实现数据类型转换的两种方法


    熟悉数据绑定的朋友都知道,当我们在Model中获取一个对象的数据,常常需要对其进行数据转换后显示在UI界面上,比如你用bool类型存储了一个人的性别,但是在界面上却需要经过转化后显示为男或女;

    今天又把数据绑定部分又看了一下,在这里就算是做个总结吧!

    方法一:当我们定义一个类,该类中又有该类类型的一个属性,那么如果我们只是在XAML中使用简单的数据绑定的话,程序就会出现问题,究其原因就是程序无法正确对该类的对象的类类型的属性无法正确转化,所以我们需要自定义一个转换类,该类继承TypeConverter,并需要重写一个该类的一个成员函数ConvertFrom,并且为需要进行转换的类添加一个类型转换的属性,最后在XAML中进行静态资源的使用就可以了!

    相应类的示例代码如下所示:

        Human.cs

    [TypeConverterAttribute(typeof(ChildConverterToHuman))] public class Human { public string Name { get; set; } public Human Child { get; set; } } public class ChildConverterToHuman : TypeConverter { public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { Human h = new Human(); string str = value.ToString(); h.Name = str; return h; } }
    MainWindow.xaml    

    <Window.Resources> <local:Human x:Key="human" Name="hippie" child="tom"/> </Window.Resources>

    这样我们就可以正确转化Human对象的child的属性的数据类型;

    Human hu = this.FindResource("human") as Human;
    if (hu != null)
    {
         MessageBox.Show(hu.Name + hu.Child.Name);
    }

    方法二:道理和方法一是一样,依然需要定义一个类型转换的类,但是需要继承的类是IValueConverter类,需要我们重写Convert和ConvertBack函数(一般重写Convert就可以)

      public class Person
        {
            public string Name { get; set; }
            public bool Gender { get; set; }
        }
        public class Converter : IValueConverter
        {
            /// <summary>
            /// Model TO UI
            /// </summary>
            /// <param name="value"></param>
            /// <param name="targetType"></param>
            /// <param name="parameter"></param>
            /// <param name="culture"></param>
            /// <returns></returns>
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                bool gender = (bool)value;
                if (gender == true)
                {
                    return "";
                }
                else
                {
                    return "";
                }
            }
    
            /// <summary>
            /// UI TO Model
            /// </summary>
            /// <param name="value"></param>
            /// <param name="targetType"></param>
            /// <param name="parameter"></param>
            /// <param name="culture"></param>
            /// <returns></returns>
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
        <Window.Resources>
            <local:Converter x:Key="converter"/>
        </Window.Resources>
        <Grid>
            <StackPanel>
                <StackPanel x:Name="sp" Orientation="Horizontal">
                    <TextBlock Text="{Binding Name}" FontSize="20" Margin="0,0,24,0"/>
                    <TextBlock Text="{Binding Gender, Converter={StaticResource converter}}" FontSize="20"/>
                </StackPanel>
            </StackPanel>
        </Grid>
     Person p = new Person
     {
         Name = "Tom",
          Gender = false
     };
     sp.DataContext = p;

    这样我们就可以将不同的数据类型通过一定的转化显示在程序界面上了!

  • 相关阅读:
    系统消息系统公告数据建模
    Chrome部分站点无法启用Flash问题
    使用netstat命令查看端口的使用情况
    Jave基本数据类型
    Mac下Tomcat安装&配置&80默认端口设置
    React学习及实例开发(一)——开始(转载)
    jQuery、layer实现弹出层的打开、关闭功能实例详解
    jQuery获取节点和子节点文本的方法
    jquery 获取$("#id").text()里面的值 需要进行去空格去换行符操作
    ES6数组新增的几个方法
  • 原文地址:https://www.cnblogs.com/hippieZhou/p/4461113.html
Copyright © 2020-2023  润新知