zip's

while(true) { Write it down; Think about it; Refine it; Sleep(); }

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

适度的结合 xmal 和 code behind

在学习和实践了一段日子 data binding 后,一直追求完全使用 xaml 而不用 code behind 去实现 data/command binding。感觉这个想法不是很正确,如果希望设计出完美支持 xaml 的 view model 和 data model 还是不容易,尤其是经验有限的时候。

 

问题:

举一个例子,设想你有一个 editable 的 combobox ,有2个按钮,一个“rename”,一个 “add name” (这里不讨论为什么这么设计,就要这么实现)。希望使用 command binding 来实现 rename。

 

初始解决方法:

开始这么做,在 view model 里有一个 command,可是需要参数啊,参数应该是新名字的字符串,和需要更名的 item 。item 可以通过另外一个 data binding 来实现,新名字也可以通过另外一个 data binding, 或者在 xaml 中通过不太好理解的一些方法获得。

 

新方法:

command 有 2 个字符串做参数,一个新名字,一个旧名字。使用 code behind 处理 Button.Click ,用 code 去获得新名字,旧名字,然后调用 view model 中的 command。这个方法的好处,你不需要费劲的立即去理解 xaml 的语法(当然你在持续学习,以后或许会有更好的方法)。code 也不错,并不丧失可测试性,甚至更加容易测试,假设 Button.Click 中简单的代码不会出错,实际情况也是不太可能会错。

posted on 2010-12-15 17:32  zip's  阅读(218)  评论(0编辑  收藏  举报