2011-08-23 43 views
1

考慮以下兩種情況:從用戶交互和服務事件中更新視圖模型的好方法是什麼?

  • 用戶在視圖按下一個按鈕(如履行訂單),我們希望以即時更新(禁用按鈕,添加一個進度條等)
  • 服務層引發了一個業務事件,最終必須反映在視圖上(例如產品已經缺貨)。

兩種情況合理地需要一些機制,X,更新視圖模型。使用MVVM,視圖可以通過在事件處理程序中設置視圖模型的屬性,通過命令綁定或通過其他機制來實現。

服務層可以使用某種機制,Y。例如,在提高業務/領域模型的事件,創建一個命令來操縱視圖模型,呼籲視圖模型等

事實上,Xÿ可能是相同的機制(或模式)的方法。

這樣做的好處是什麼,它遵循MVVM的精神,但是幹嗎?

+0

您針對WPF,Silverlight還是其他技術? –

+0

Silverlight目前,但我也會對技術不可知論模式感興趣。也許這應該是一個單獨的問題。 – Kit

回答

1

我認爲你需要選擇一個MVVM框架並遵循它所支持的模式。

一般:

  • 你的按鈕將通過一個ICommand或任何你MVVM框架支持
  • A「CanFulfillOrder」被鉤到您的視圖模型一個FulfillOrder方法,布爾屬性會被迷上了通過INotifyPropertyChanged禁用你的按鈕,這可以通過FulfillOrder方法或你提到的事件觸發。它也可以綁定到進度條上的可見性。
  • 另一個特性可以提供在進度條上的百分比和更新適當

良好,通用MVVM框架MVVM Light

如果您正在尋找更多的功能,並且可以處理更多的複雜問題,請嘗試Caliburn

或者如果你想使用動態和嘗試一些尖端,嘗試我的框架:NoMvvm

+0

我對這個部分很好,但是事件服務層呢。例如,缺貨通知源於服務,而不是通過綁定的UI。你是否建議增加一個OutOfStockCommand到視圖模型? – Kit

+0

您的服務將實現一個接口,如IOutOfStockEvent,並實現一個C#事件。你的ViewModel會有一個它可以訪問的IOutOfStockEvent實例,並且可以通過C#來訂閱事件。當事件觸發時,您可以在C#中執行您需要做的所有工作。您也可以使用依賴注入將IOutOfStockEvent傳遞給ViewModel。 – jonathanpeppers

+1

下面是我的開源項目示例中的一個鏈接,演示服務:http://nomvvm.codeplex.com/SourceControl/changeset/view/82732#1639419它不使用事件,但是您可以看到您可以輕鬆擁有的位置_mbService上的事件並訂閱它。有一些在ViewModel中使用幾個服務的例子。 – jonathanpeppers

相關問題