2010-05-28 73 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