2011-11-08 21 views
4

關於MVVM中對話窗口的最佳實踐(對WPF)有什麼共識嗎?我已經看到了通過兩種方式走近:我應該如何從我的ViewModels生成對話框?

  1. 調解員(EventAggregator,EventBus,或任何你喜歡稱呼它)是發送「RequestsDialog」消息,並等待一個「DialogProcessed」消息。

  2. 在視圖xaml本身中聲明的對話框,它綁定到調用者的視圖模型並通過Command或EventTrigger或類似的東西顯示。

我想弄清楚哪個是更好的方法,我需要一些幫助。

我對#1的關注是(並且總是),控制請求和回覆消息範圍的最佳方法是什麼?我的意思是,假設我有中介處理「本地」消息和「全局」應用程序消息......我如何確保我的ViewModel仍然可以接收全局消息......但同時另一個ViewModel在當前窗口上不會意外收到用於活動ViewModel的DialogProcessed消息。

採取以下情形:

  • 1窗口
  • 2用戶控件,每個結合到獨立的ViewModels
  • ViewModel1發送RequestConfirmation消息,並等待一個ConfirmationResponse消息
  • 我也有全球性的消息在ViewModel1中接收(如RequestCloseWindow消息)。

如何阻止ViewModel2獲取由ViewModel1啓動的RequestConfirmation消息的ConfirmationResponse消息?

回答

1

你嘗試使用類似於棱鏡,從一些InteractionRequests?

它們完全覆蓋您描述的場景。看看文章this

1

您可以傳遞一個參數以及標識其用途的消息,也可以讓消息包含某個方法的委託以在其完成後執行。

通常我更喜歡使用標識符,因爲它更簡單。有時它是一個Id或GUID,但通常它只是this。在處理Processed訊息的方法這樣,我只能說

if (evt.Source != this) return; 
+0

而在響應的evt.Source中,觸發「響應」事件的人將來自「請求」事件的原始源傳遞給響應? – Jeff

+0

@ JeffN825當然,這是一個辦法 – Rachel

相關問題