2012-11-19 37 views
1

我工作的一個MVVM應用程序,使用MVVM輕,整體上我發現它非常漂亮地工作着去除System.Windows.MessageBoxResult的依賴。然而,我有一個嘮叨的問題,希望有人能幫忙。MVVM光:如何從DialogMessage

我使用的是從VM發送的DialogMessage實例視圖中顯示的對話框。結果會通過回調發回給我的虛擬機,這一切都很好。

然而對話框(OK,是,否,取消等)的結果發回的enum System.Windows.MessageBoxResult中的一員。這似乎違背了View/ViewModel與我的分離,MessageBoxResult顯然是一種來自UI的類型,所以VM不應該依賴於這個或任何來自System.Windows的命名空間。

我正在尋找的是好歹用DialogMessage一個替代回調如Action<UserResult>;而非Action<System.Windows.MessageBoxResult>;,其中UserResult是我定義爲代表的MessageBoxResult用戶選擇,而不依賴的類型。

這是可能的,或者我是不是太嚴,我希望保持UI概念了VM的?

+0

@Blachshma感謝您的答覆。我可能會用你的建議來包裝DialogMessage並轉換結果。 – Darran

回答

0

關於問題的第二部分,當我開始使用MVVM Light時,我也覺得在虛擬機中接收MessageBoxResult看起來有點面向UI。
在另一方面,如果只有是不同的 - 比如UserResult如你所說 - 那會是足夠的嗎?
如果只有班級的名稱是一個問題,我認爲你可以讓它滑倒。 結果Ok, Yes, No, Cancel沒有說明MessageBox是否帶有按鈕,或者它是否是某種其他類型的UI實現(可以說是帶有組合框的表單)。

如果仍然困擾着你,你總是可以創建爲DialogMessage的包裝,這將提高對話,得到MessageBoxResult,並返回一個UserResult它可以用相同的值的枚舉(認爲它作爲一個簡單的轉換器) 。
但正如我所說的,我想可能是矯枉過正...