适度的结合 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 中简单的代码不会出错,实际情况也是不太可能会错。