3.2.2 使用TypeConverter类将XAML标签的Attribute与对象的Property进行映射注意本小节的例子对于初学者来说理解起来比较困难而且实用性不大,主要是为喜欢刨根问底的WPF程序员准备的,初学者可以跳过这一小节。首先,我们准备了一个类:

这个类具有两个属性:

● string类型的Name

● Human类型的Child。

现在我的期望是,如果在XAML里这样写:

则能够为Human实例的Child属性赋一个Human类型的值,并且Child.Name就是这个字符串的值。我们先看看直接写行不行。在UI上添加一个按钮button1,并在它的Click事件处理器里写上:

编译没有问题,但在单击按钮之后程序抛出异常,告诉Child不存在,为什么Child不存在呢?原因很简单,Human的Child属性是Human类型,而XAML代码中的ABC是个字符串,编译器不知道如何把一个字符串实例转换成一个Human实例。那我们应该怎么做呢?办法是使用TypeConverter和TypeConverterAttribute这两个类。首先,我们要从TypeConverter类派生出自己的类,并重写它的一个ConvertFrom方法。这个方法有一个参数名为value,这个值就是在XAML文档里为它设置的值我们要做的就是把这个值“翻译”成合适类型的值赋给对象的属性:

有了这个类还不够,还要使用TypeConverterAttribute这个特征类把StringToHumanTypeConverter这个类“粘贴”到作为目标的Human类上。

因为特征类在使用的时候可以省略Attribute这个词,所以也可以写成:

最新文章

  1. C/C++ Memory Layout
  2. BAT实现服务器文件同步
  3. Linux进程管理
  4. Java 内部类摘抄
  5. EditText的hint不显示
  6. 摩托罗拉SE4500 三星 S3C6410 Wince6.0平台软解码调试记录以及驱动相关问题解释
  7. PLSQL_性能优化系列10_Oracle Array数据组优化
  8. git服务器gitlab之搭建和使用--灰常好的git服务器【转】
  9. (译)"usermod"命令使用完全指导---15个练习例程截图
  10. 查找——图文翔解Treap(树堆)
  11. 经典回忆Effective C++ 1
  12. LeetCode OJ 42. Trapping Rain Water
  13. hdu 2089 不要62(入门数位dp)
  14. Iframe 自适应高度
  15. 各种MM(存储器)含义
  16. Python(列表操作应用实战)方法二
  17. 记录一次使用VS2015编译错误的原因查找(boost+gdal)
  18. 简单明了的掌握diff命令? 参考: http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html
  19. 字符集(编码)转换_Qt532_QString
  20. [ Office 365 开发系列 ] 前言

热门文章

  1. C语言:猴子吃桃问题
  2. Datax环境搭建
  3. 传统.NET 4.x应用容器化体验(4)
  4. 【LeetCode】404. 左叶子之和
  5. SQL慢查询排查思路
  6. SDN与OpenFlow架构--初识
  7. 使用Maven打包可运行jar和javaagent.jar的区别
  8. Skywalking-04:扩展Metric监控信息
  9. shiro反序列化550、721
  10. Drupal 远程代码执行漏洞(CVE-2019-6339)