WPF中在XAML中实现数据类型转换的两种方法
2015-04-27 19:57
573 查看
熟悉数据绑定的朋友都知道,当我们在Model中获取一个对象的数据,常常需要对其进行数据转换后显示在UI界面上,比如你用bool类型存储了一个人的性别,但是在界面上却需要经过转化后显示为男或女;
今天又把数据绑定部分又看了一下,在这里就算是做个总结吧!
方法一:当我们定义一个类,该类中又有该类类型的一个属性,那么如果我们只是在XAML中使用简单的数据绑定的话,程序就会出现问题,究其原因就是程序无法正确对该类的对象的类类型的属性无法正确转化,所以我们需要自定义一个转换类,该类继承TypeConverter,并需要重写一个该类的一个成员函数ConvertFrom,并且为需要进行转换的类添加一个类型转换的属性,最后在XAML中进行静态资源的使用就可以了!
相应类的示例代码如下所示:
这样我们就可以正确转化Human对象的child的属性的数据类型;
方法二:道理和方法一是一样,依然需要定义一个类型转换的类,但是需要继承的类是IValueConverter类,需要我们重写Convert和ConvertBack函数(一般重写Convert就可以)
这样我们就可以将不同的数据类型通过一定的转化显示在程序界面上了!
今天又把数据绑定部分又看了一下,在这里就算是做个总结吧!
方法一:当我们定义一个类,该类中又有该类类型的一个属性,那么如果我们只是在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;
这样我们就可以将不同的数据类型通过一定的转化显示在程序界面上了!
相关文章推荐
- 用ObjectDataProvider绑定方法,用IValueConverter实现数据类型转换,重载ValidationRule实现数据验证,BindsDirectlyToSource等
- 大津阈值OSTU函数实现方法对比, Mat转换为IplImage 类型,并复制数据
- 报错:对象必须实现 IConvertible;以分隔符进行分割链接concat_ws的使用方法;mysql数据类型转换cast,convert
- c++ operator操作符的两种用法:重载和隐式类型转换,string转其他基本数据类型的简洁实现string_cast
- 采用扩展方法实现数组中数据类型转换(c#)
- 利用基本数据类型的包装类中的方法实现类型转换
- ThinkPHP实现转换数据库查询结果数据到对应类型的方法
- JS中的两种数据类型及实现引用类型的深拷贝的方法
- Mongodb 利用mongoshell进行数据类型转换的实现方法
- Java基于字符流形式读写数据的两种实现方法示例
- JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
- 在Python标准库的json包中,提供了JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换
- HttpURLConnection和okHttp两种获取网络数据的实现方法
- C++ 数据类型转换,常见函数实现
- 怎样在Java中实现基本数据类型与字符之间的转换
- 数据类型转换 ,8bit数据 转换为 16bit数据的四种方法
- 将字典类型(Dictionary)类型数据拼接为key1=value1&key2=value2的两种方法
- 两种前台获取数据的方法底层的实现
- pandas 取出表中一列数据所有的值并转换为array类型的方法
- SQL Server数据类型转换方法