WPF - 在View Model中处理来自用户控件的事件

Vit*_*aly 16 wpf events mvvm

我正在使用MVVM模式构建一个WPF应用程序(两者都是我的新技术).我将用户控件用于不包含业务逻辑的简单可重用功能,以及用于构建应用程序逻辑的MVVM模式.假设一个视图包含触发事件的用户控件,我想为该事件添加一个事件处理程序.该事件处理程序应该位于视图的视图模型中,因为它包含业务逻辑.问题是 - 视图和视图模型仅通过绑定连接; 如何使用绑定连接事件处理程序?甚至可能(我怀疑不是)?如果不是 - 我应该如何处理视图模型中控件的事件?也许我应该使用命令或INotifyPropertyChanged?

Tho*_*son 14

一般来说,如果您在用户控件中使用事件,那么避免代码隐藏在代码中是一种很好的MVVM实践.所以尽可能使用INotifyPropertyChangedICommand.

话虽如此,根据您的项目以及您的实用程度,有时候使用控件的代码更有意义.

我有几次使用过这样的东西:

private void textBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    MyViewModel vm = this.DataContext as MyViewModel;
    vm.MethodToExecute(...);
}
Run Code Online (Sandbox Code Playgroud)

您还可以考虑附加命令行为,有关此内容的更多信息以及在此处查找的实现:

使用MVVM从WPF ListView项目中触发双击事件