我正在构建一个使用MVVM模式的WPF应用程序(两者都是我的新技术)。我使用用户控件来处理不包含业务逻辑的可重用功能的简单位,以及用于构建应用程序逻辑的MVVM模式。假设一个视图包含触发事件的用户控件,并且我想为该事件添加一个事件处理程序。该事件处理程序应该位于视图的视图模型中,因为它包含业务逻辑。问题是 - 视图和视图模型仅通过绑定连接;如何使用绑定连接事件处理程序?这是甚至可能的(我怀疑不是)?如果不是 - 我应该如何处理视图模型中控件的事件?也许我应该使用命令或INotifyPropertyChanged?WPF - 处理视图模型中用户控件的事件
13
A
回答
11
一般来说,避免代码背后的代码是一种很好的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
0
在带有XAML的MVVM中使用ICommand。
http://johnpapa.net/5-simple-steps-to-commanding-in-silverlight
(MVVM应该已经acronym'd为VVMM:查看,查看模型,模型,看起来也更好:))
相关问题
- 1. 充分利用事件处理程序的视图对象在视图模型的事件处理程序
- 2. WPF-MVVM:在视图模型中的TabItem头单击事件处理
- 3. 用户控件内用户控件不从视图模型
- 4. 使WPF用户控件标记点击事件处理
- 5. WPF用户控件视图模型结合
- 6. WPF中的事件处理
- 7. 使用WPF处理WebBrowser控件托管的JavaScript中的事件
- 8. 使用WPF处理事件
- 9. 模型视图演示者 - 处理更复杂的UI控件
- 10. 处置WPF用户控件
- 11. 更改用户控件的默认事件处理程序
- 12. 子视图UITableViewCell中的事件处理
- 13. 如何为WPF中的每个用户控件分别创建视图模型
- 14. 获取wpf程序的视图模型中的事件参数
- 15. 处理来自包含WPF文本框的用户控件的事件
- 16. 我如何处理c#wpf自定义控件中的事件
- 17. DataTemplate中WPF控件的事件处理程序
- 18. 如何处理asp.net中的用户控件事件?
- 19. wpf用户控件模板
- 20. 当派生WPF控件时,是否可以保证控件的事件处理程序首先处理事件?
- 21. WPF用户控件和外部事件
- 22. C#中的模型视图控件#
- 23. 处理WPF退出事件
- 24. WPF和Powershell - 处理事件
- 25. 视图模型绑定如何工作? +使用视图模型处理动态控件的最佳方式?
- 26. 地图视图触摸事件处理
- 27. 从用户控件中删除单个事件处理程序
- 28. 在子用户控件中处理父事件
- 29. WinForm中的Interop WPF,如何处理来自WPF控件的事件
- 30. WPF在不同的用户控件中处理命令
控制应该是可重复使用的,所以代码不会做 - 它将控件绑定到特定的视图模型。命令...可能不是 - 它们更多是用户操作。 INotifyPropertyChanged呢? 谢谢:) – Vitaly 2010-05-28 07:11:08
很难说,不知道更多具体细节。但是我添加了一些链接到相关信息 – ThomasAndersson 2010-05-28 07:19:54
@Vitaly如果您担心将视图绑定到显式ViewModel,您可以将ViewModel包装在界面中。我会研究附加的命令行为,他们正在成为公认的做法。另外,请查看MVVMLight或Caliburn作为协助您MVVM工作的框架,它会让您的生活更轻松。 – Agies 2010-05-29 01:50:32