2010-07-30 91 views
2

我正在使用MVVM模型做一個silverlight,我發現很難通過MVVM處理事件,尤其是事件處理程序在視圖中做了很多更改,如啓用並禁用按鈕,更新媒體元素功能和位置。我對MVVM還是個新手,我無法想象我該怎麼做。有沒有人已經知道好文章開始或簡單的方法來理解:)我會回覆我可能會發現有趣的,而我也做我的搜索。謝謝什麼是MVVM事件處理的最佳實踐

回答

4

1)瞭解MVVM有不同的「風味」。儘管理論上需要,嚴格/硬核MVVM模式並不是必需的。

2)許多視圖事件可以通過命令處理。 WPF支持這一點,我相信Silverlight 4也是如此。一個簡單的視圖事件開始將是按鈕點擊。這允許您在ViewModel中處理事件(而不是視圖的'代碼隱藏')。

3)之類的東西啓用/經由MVVM模型禁用視圖控制/狀態,這裏是一個例子/解釋:

  • 的Xaml對照(比方說,一個按鈕)是數據綁定到視圖模型爲無論屬性 (在這種情況下,它將是按鈕的IsEnabled屬性)。
  • Your ViewModel具有IsButtonEnabled屬性。
  • 每當您在虛擬機中更改此屬性時,引發PropertyChanged通知,您將在視圖中看到綁定的結果(該按鈕的IsEnabled狀態將被更新)。

ps - 你可以通過VM屬性以這種方式做很多事情:從文本到各種屬性狀態,顏色,甚至可以在屬性設置器/獲取器等等中播放動畫。

乾杯

+0

感謝您的解答,有疑問。可以發送一個控件作爲參數並在虛擬機中做任何我想要的操作。這是一種不好的做法嗎? – Miroo 2010-07-30 21:32:23

+0

至少在Windows的WPF中,如果您綁定了命令,則不必綁定到其他「IsXxxEnabled」變量。只要這樣做,結果會改變命令的CanExecute方法,並引發CanExecuteChanged事件。 – 2010-07-30 21:34:42

+0

@Miroo。要回答你的問題(哇,這是很久以前的!),我會說是的,這是不好的做法,我不會這樣做,除非你真的必須這樣做(因爲你找不到任何其他方式,你不願意花時間重構所有的東西)。但是,從技術上講,你所說的可以做到。最後,你的軟件沒有用戶知道。 – AlvinfromDiaspar 2012-07-31 04:08:00