WPF中在XAML中实现数据类型转换的两种方法
原文: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;

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

posted on 2018-08-02 23:52 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/9410940.html

WPF中在XAML中实现数据类型转换的两种方法相关推荐

  1. 多个html如何套用套一个头部,Vue.js项目中管理每个页面的头部标签的两种方法...

    在 Vue SPA 应用中,如果想要修改 HTML 的头部标签,如页面的 title ,我们只能去修改 index.html 模板文件,但是这个是全局的修改,如何为每个页面都设置不一样的 title ...

  2. java整型转换为数组_基于java中byte数组与int类型的转换(两种方法)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...

  3. xlsx怎么设置行高列宽_Excel2016中调整行高和列宽的两种方法

    在报表的编辑过程中经常需要调整特定行的行高或列的列宽,例如当单元格中输入的数据超出该单元格宽度时,需要调整单元格的列宽.本文图文讲述了Excel2016中调整行高和列宽的两种方法. 方法一:使用命令调 ...

  4. js中判断文本框是否为空的两种方法

    js中判断文本框是否为空的两种方法 //用户名非空验证 function checkUserName(){ var name = document.myform.txtUser; //在这里我认为: ...

  5. 数据增加的两种方法(二)

    数据增加的两种方法(二) 开发工具与关键技术:SQL Server 2014.数据增加的两种方法(二) 作者:袁何恩 撰写时间:2019年7月26日 今天,我要和大家分享的技术是新增数据的两种方法. ...

  6. cxgrid中纵横单元格合并_逆向查询合并单元格中的数据,这两种方法你值得拥有...

    ​有同事询问了一个问题,说下面的这种表格,我有部门和人员的清单列表,如果我想根据人员清单去查询其所在的部门要怎么实现呢? 因为部门列的数据内容是经过合并的,如果我们直接使用Vlookup进行查找,查找 ...

  7. Python中按值来获取指定键的两种方法

    Python字典中的键是唯一的,但不同的键可以对应同样的值,比如说uid,可以是1001.id同样可以是1001.这样的话通过值来获取指定的键,就不止一个!而且也并不太好处理.这里同样提供两种思路来处 ...

  8. 如何将unity3d动画嵌入html,在Unity3D中使用精灵动画引擎制作动画的两种方法

    7月28日消息,如今的游戏玩家对于游戏角色的动作要求越来越高,给开发者提出了众多的要求,工作量也相应上升.那么如何才能简单快速地制作角色动画以提升效率呢?下面就和大家分享两个在Unity3D中使用精灵 ...

  9. 怎样在python的turtle中输入文字_Python在图片中添加文字的两种方法

    本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...

最新文章

  1. 你哪来这么多事(五):职工信息插入
  2. 【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题
  3. mysql-5.7.17-winx64的安装配置
  4. JS实现限制input上传文件的大小和格式
  5. python2的idle打不开了
  6. Python实现atm机的功能
  7. python中的所有功能_python – 是否可以列出模块中的所有功能?
  8. SAP License:一位在ERP行业从业九年的经验总结
  9. Repo Jacking:依赖关系仓库劫持漏洞,影响谷歌GitHub等7万多个开源项目的供应链...
  10. 无类域间路由CIDR
  11. pip install -q git+https://github.com/tensorflow/docs.git报错
  12. 大学计算机基础操作教程文本框,大学计算机基础教程及实训指导教学课件 薛晓萍 第六部分 演示文稿制作软件PowerPoint 2003.ppt...
  13. Micropython——基于PYB的霍尔编码器电机的PID控制
  14. 激光导航AGV-激光雷达安装要求
  15. iOS 开发者 2019 面试总结
  16. 如何查询网络出口IP
  17. 苹果地图副总裁_挖角苹果高级计算机视觉专家 Mapillary地图更新添一员大将
  18. 曾经的习武少年,如今的锦佰安CEO:他立志要开启身份认证的无密时代
  19. 《名贤集》《明贤集》四言集
  20. CFileDialog类学习

热门文章

  1. 工厂模式,简单工厂模式,抽象工厂模式三者有什么区别
  2. Memcache架构新思考
  3. [转]Java5泛型的用法,T.class的获取和为擦拭法站台
  4. [恢]hdu 2317
  5. CVPR 2021 | 超越卷积的自注意力模型,谷歌、UC伯克利提出HaloNet
  6. 对抗攻击之利用水印生成对抗样本
  7. 微软出品,文科生也能学得懂的Python免费入门视频
  8. AI项目商务合作,寻广州附近计算机视觉算法团队!
  9. mysql容器重启数据是否丢失_docker容器重启 数据会丢吗
  10. 【深度学习系列】——神经网络的可视化解释