深入浅出WPF(8)——数据的绿色通道,Binding(中)

深入浅出WPF(8)——数据的绿色通道,Binding(中)小序:今天中午吃完饭回工位的路上,和俺们组资深的Level 2技术支持肖老师聊了几句。我跟肖老师说,最近我在学习Binding,肖老师说——那可不是个好东西!因为如果在程序中使用了Binding,当出现错误的时候,比较难于调试。道理很简单——以前使用事件(C++里是回调)的时候,能明确地在事件处理函数里去跟踪调试,现在使用Bind
摘要由CSDN通过智能技术生成

深入浅出WPF(8)——数据的绿色通道,Binding(中)

小序:

今天中午吃完饭回工位的路上,和俺们组资深的Level 2技术支持肖老师聊了几句。我跟肖老师说,最近我在学习Binding,肖老师说——那可不是个好东西!因为如果在程序中使用了Binding,当出现错误的时候,比较难于调试。道理很简单——以前使用事件(C++里是回调)的时候,能明确地在事件处理函数里去跟踪调试,现在使用Binding,数据源和UI之间是一支封闭的“管道”,在代码中很难看到他们是在哪里关联上的、出了问题也不知道在哪里拦截、设断点。

这的确是个问题!我又去请教了别的同事。Allen同学告诉我,在Binding和数据目标(的Dependency Property)有一些事件,会在数据有传输的时候被激发,或者在Binding的Converter和Validator上下下功夫。看来Binding值得研究的地方还真多呀!

文章的篇幅毕竟有限,我只能捡工作当中用的最多的来介绍。那么,我还有哪些东西需要介绍呢?

  • 让数据“为我所用”的Converter
  • 让数据“干干净净”的Validation
  • 集合控件与集合数据的Binding
  • 偷懒专用的数据中转站——DataContext

希望我的工作能给大家搭起一个良好的学习框架——全面细致的内容尽在MSDN里,请大家阅读的时候会轻松一些。

正文 

不拘一格用数据的Converter

上篇文已经说明,Binding就是数据源与目标之间的“关联”。大多数情况下,数据从Source到Target以及从Target返回Source都是“直来直去”的,但有些场景却需要我们对数据做些转换才能为我所用。举两个典型的例子:

  • 如果数据源里的值是Y和N,如果是Y,那么UI上的CheckBox就被勾选,否则就不勾选,这就需要我们把string(也许是char)类型的数据转换成bool?类型再使用。如果Binding是TwoWay的,CheckBox的勾选操作还会把值传回数据源。
  • 如果“评论内容”TextBox里没有内容,则“提交”Button不可以点击。这是个典型的OneWay数据Binding,因为只有TextBox去影响Button的份儿。具体如何实现,大家可以先猜猜;)

想要实现这类的转换,就需要为Binding这个“绿色通道”设置“关卡”,这里我们用到的关卡就是“数据转换器”(Data Converter)。Converter实际上就是一个类,它这个类有个要求——它需要实现IValueConverter这个接口。这个接口的内容非常简单——只有两个方法,它们分别是:

  • Convert方法:按照你的要求,把从数据源传来的数据转成你想要的数据——至于是加减乘除还是煎炒炸炖,那就要看你怎
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值