我正在使用MVVM模式构建WPF应用程序(两者都是我的新技术)。我将用户控件用于不包含业务逻辑的简单可重用功能,以及用于构建应用程序逻辑的MVVM模式。假设一个视图包含触发事件的用户控件,我想为该事件添加一个事件处理程序。该事件处理程序应该位于视图的视图模型中,因为它包含业务逻辑。问题是 - 视图和视图模型仅通过绑定连接;如何使用绑定连接事件处理程序?甚至可能(我怀疑不是)?如果不是 - 我应该如何处理视图模型中控件的事件?也许我应该使用命令或INotifyPropertyChanged?
答案 0 :(得分:12)
一般来说,如果您在用户控件中使用事件,那么避免代码隐藏在代码中是一种很好的MVVM实践。因此,如果可能,请使用INotifyPropertyChanged
和ICommand
。
话虽如此,根据您的项目以及您的实用程度,有时候使用控件的代码更有意义。
我曾几次使用过这样的东西:
private void textBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
MyViewModel vm = this.DataContext as MyViewModel;
vm.MethodToExecute(...);
}
您还可以考虑Attached Command Behaviour,有关此内容的更多信息以及可在此处找到的实现:
Firing a double click event from a WPF ListView item using MVVM
答案 1 :(得分:1)
答案 2 :(得分:0)
在MVVM中使用ICOMmand和XAML。
http://johnpapa.net/5-simple-steps-to-commanding-in-silverlight
(MVVM应该是VVMM的首字母缩略词:View,View Model,Model,看起来也更好:))