2014-10-31 120 views
0

我明白了在ViewModel代碼或Model代碼中不調用MessageBox的基本原則,而是使用某種回調,無論是接口還是添加到ViewModel施工。MVVM,ViewModel,Model&MessageBoxes

到目前爲止,這麼好。

但是,只給出的例子到目前爲止,您在視圖中按下按鈕,然後ViewModel通過回調引發MessageBox來確認並繼續。

但是,如果模型在實現用戶反饋需求之前先做了大量工作,該怎麼辦?我是否也讓模型的回調函數起作用?

它是否有不同的設計?

任何意見表示讚賞。 :-)

+0

將是巨大的。模型不應該與像視圖imho這樣的事物混合在一起。 – fex 2014-10-31 22:13:42

+0

我基本上試圖將經典的Windows.Forms程序轉換爲MVVM WPF應用程序用於學習目的。 在Windows中。你點擊一個按鈕的形式,程序處理一堆文件,每隔一段時間它有一個問題如何處理文件X. – 2014-10-31 22:18:29

+0

我想你應該迭代通過文件收集和分別處理它們然後 – fex 2014-10-31 22:21:48

回答

0

好的,我想我已經明白了。

在我的模型中,我將每次調用都封裝在一個名爲IIOServices的自編寫界面中,並將所有UI調用封裝在名爲IUIServices的界面中。

UIServices只使用標準數據類型或自定義的枚舉,並且沒有任何來自System.Windows.Forms或System.Windows命名空間。

然後,模型的客戶端負責提供一個實現,以任何方式訪問FileOpenDialogs和MessageBoxes等。

此實現(這是保持小的學習經驗)我的示例代碼可以在這裏找到,如果任何人的興趣:如果你提供一些例子(僞)

MVVM with MessageBoxes sample code

0

您公開一個公共事件,並讓View(.xaml.cs)在啓動時收聽它。該代碼仍將在工作線程上運行,但後端邏輯在單元測試期間不會掛起。

1

在我看來,提高模型回調不應該是一個大問題,但我想這取決於你的架構和你的個人喜好。所以如果你真的不想在你的模型中有任何連接到視圖的回調函數,你可以讓你的mvvm(或你的表示/應用層)處理控制流,而不是讓模型去做。

您可以實現更精細的模型方法,並讓應用程序層協調模型的操作。這樣,只要模型操作完成並且需要用戶輸入,mvvm層就可以提高回調。

例子:

// method of your view model/application layer 
public void InteractiveProcessing() 
{ 
    // business logic is separated in smaller chunks 
    model.DoFirstPartOfOperation(); 
    // check if model needs additional user input 
    if(model.NeedsInput) 
     // raise callback here, let user enter input etc... 
    // continue processing with user input 
    model.DoSecondPartOfOperation(userInput); 
} 

當然,這也只意義,如果你可以在你的業務邏輯分成更小的部分。

+0

好的,但聽起來好像它沒問題,只要它不是實際的MessageBox調用就可以在模型中進行回調。 謝謝你的建議:) – 2014-11-01 04:35:48