2010-05-28 69 views
13

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

回答

11

一般来说,避免代码背后的代码是一种很好的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

+0

控制应该是可重复使用的,所以代码不会做 - 它将控件绑定到特定的视图模型。命令...可能不是 - 它们更多是用户操作。 INotifyPropertyChanged呢? 谢谢:) – Vitaly 2010-05-28 07:11:08

+0

很难说,不知道更多具体细节。但是我添加了一些链接到相关信息 – ThomasAndersson 2010-05-28 07:19:54

+0

@Vitaly如果您担心将视图绑定到显式ViewModel,您可以将ViewModel包装在界面中。我会研究附加的命令行为,他们正在成为公认的做法。另外,请查看MVVMLight或Caliburn作为协助您MVVM工作的框架,它会让您的生活更轻松。 – Agies 2010-05-29 01:50:32

相关问题