【发布时间】:2011-01-06 11:04:57
【问题描述】:
我喜欢 MVVM。我不喜欢它,但喜欢它。大部分都是有道理的。但是,我一直在阅读鼓励您编写大量代码以便编写 XAML 而不必在代码隐藏中编写任何代码的文章。
让我举个例子。
最近我想将 ViewModel 中的命令连接到 ListView MouseDoubleClickEvent。我不太确定该怎么做。幸运的是,谷歌对一切都有答案。我找到了以下文章:
- http://blog.functionalfun.net/2008/09/hooking-up-commands-to-events-in-wpf.html
- http://joyfulwpf.blogspot.com/2009/05/mvvm-invoking-command-on-attached-event.html
- http://sachabarber.net/?p=514
- http://geekswithblogs.net/HouseOfBilz/archive/2009/08/27/adventures-in-mvvm-ndash-binding-commands-to-any-event.aspx
- http://marlongrech.wordpress.com/2008/12/13/attachedcommandbehavior-v2-aka-acb/
虽然这些解决方案有助于我理解命令,但也存在问题。前面提到的一些解决方案使 WPF 设计器无法使用,因为在依赖属性后附加“内部”的常见技巧; WPF 设计器找不到它,但 CLR 可以。一些解决方案不允许对同一个控件执行多个命令。一些解决方案不允许使用参数。
经过几个小时的实验,我决定这样做:
private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e) {
ListView lv = sender as ListView;
MyViewModel vm = this.DataContext as MyViewModel;
vm.DoSomethingCommand.Execute(lv.SelectedItem);
}
那么,MVVM 纯粹主义者,请告诉我这有什么问题?我仍然可以对我的命令进行单元测试。这似乎很实用,但似乎违反了“ZOMG ...您的代码隐藏中有代码!!!!”的准则请分享您的想法。
提前致谢。
【问题讨论】:
-
我自己做的,我觉得没问题...
-
ZOMFG 代码隐藏!!!!!!
-
我同意@Schneider 的观点——这很有意义。事实上,避免使用所谓的代码隐藏文件所需的大量管道代码仍然让我头晕目眩。
标签: c# .net wpf design-patterns mvvm