Мне нравится MVVM. Мне это не нравится, но нравится. Большая часть этого имеет смысл. Но я продолжаю читать статьи, которые помогут вам написать много кода, чтобы вы могли писать XAML и не нужно писать код в коде.
Позвольте мне привести пример.
Недавно мне захотелось подключить команду в моей ViewModel к ListView MouseDoubleClickEvent. Я не был уверен, как это сделать. К счастью, у Google есть ответы на все. Я нашел следующие статьи:
- 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, пожалуйста, скажите мне, что с этим случилось? Я могу еще Unit test выполнить мою команду. Это кажется очень практичным, но, похоже, нарушает рекомендацию "ZOMG... у вас есть код в коде!" Пожалуйста, поделитесь своими мыслями.
Спасибо заранее.