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

时间:2010-05-28 06:56:50

标签: wpf events mvvm

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

3 个答案:

答案 0 :(得分:12)

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

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

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

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,看起来也更好:))