我正在構建一個使用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. 處理WPF用戶控件的事件
- 2. WPF用戶控件:從視圖模型
- 3. C#處理winform中的WPF用戶控件事件
- 4. 充分利用事件處理程序的視圖對象在視圖模型的事件處理程序
- 5. WPF-MVVM:在視圖模型中的TabItem頭單擊事件處理
- 6. 用戶控件內用戶控件不從視圖模型
- 7. 使WPF用戶控件標記點擊事件處理
- 8. 用戶控件事件處理程序
- 9. WPF用戶控件視圖模型結合
- 10. WPF中的事件處理
- 11. 訪問控件內部ASP.NET視圖控件(事件處理)
- 12. 使用WPF處理WebBrowser控件託管的JavaScript中的事件
- 13. 使用WPF處理事件
- 14. 處理用戶控件內部的控件事件
- 15. 正確處理WPF用戶控件上的控件
- 16. WPF用戶控件子控件的處理程序
- 17. 處置WPF用戶控件
- 18. 模型視圖演示者 - 處理更復雜的UI控件
- 19. 更改用戶控件的默認事件處理程序
- 20. 子視圖UITableViewCell中的事件處理
- 21. 如何爲WPF中的每個用戶控件分別創建視圖模型
- 22. 獲取wpf程序的視圖模型中的事件參數
- 23. wpf用戶控件清理
- 24. 處理來自包含WPF文本框的用戶控件的事件
- 25. 我如何處理c#wpf自定義控件中的事件
- 26. DataTemplate中WPF控件的事件處理程序
- 27. wpf用戶控件模板
- 28. 如何處理asp.net中的用戶控件事件?
- 29. 模型視圖中的WPF更改控件
- 30. 收聽視圖中的模型事件
控制應該是可重複使用的,所以代碼不會做 - 它將控件綁定到特定的視圖模型。命令...可能不是 - 它們更多是用戶操作。 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