2013-04-24 98 views
2

討論視圖模型之間的通信模式有interesting post模式是MVVM中的反模式嗎?

我最近努力在WPF MVVM應用程序中實現模態對話框,但是我越想越多,我就看到了爲什麼它很困難的原因以及爲什麼沒有內置的幫助程序來實現此目的。針對不同的平臺只能強化這種觀點:通常通過導航到移動設備上的不同視圖來實現看起來適合於顯示選定項目細節的模式對話框的內容。

所以我的問題給那些成功實現MVVM模式並避免代碼隱藏的人:你是否也避免了模態對話框?你覺得什麼替代品適合?我可以想到至少兩個:

  • 在新視圖中放置child(模態)視圖並使用pub/sub實現父級和子模型之間的通信;
  • 將帶有子控件的面板直接添加到父視圖中,並將其可見性作爲彈出模擬模式激活子視圖。

第二種方法肯定會受到更多的限制,當父視圖可以產生各種子視圖時,它並不真正起作用,但當父視圖需要顯示一個小的單個彈出框時,它看起來很合適。或者更爲通用的做法是更好地採用第一種方法。還有其他的選擇嗎?

回答

1

thats我在mvvm中做對話的方式。

視圖模型這就要求一個對話窗口:

var result = this.uiDialogService.ShowDialog("Dialogwindow title goes here", dialogwindowVM); 

... do anything with the dialog result... 
+0

謝謝,我已經看到了這種做法。我對此不確定,因爲那時我們把對話看作是服務,所以在這樣的服務中顯示對話和調用Web服務沒有太大區別。換句話說,即使每個單獨的對話框都可以使用MVVM模式實現,我們也可以將它從共享的MVVM空間中取出。另一件事是我們聲明某個操作必須使用DialogService。如果它在不同的平臺上使用不同的手段呢?那麼我們不能重用它。 – 2013-04-24 12:52:50

+0

你的意思是重用?重用.net視圖模型? – blindmeis 2013-04-24 13:35:05

+0

是的,我已經看到包裝在可移植類庫中的視圖模型,並在WPF,Windows Store,Windows Phone甚至iOS/Android應用程序之間重用。我想以這種方式構建我的模型,即使需要花費一些努力來弄清楚如何。 – 2013-04-24 14:18:44