2013-02-11 45 views
7

我正在開發基於PRISM框架(Unity Container)的WPF 4.0 - MVVM應用程序。如何在MVVM中實現對話架構

我在想什麼是在mvvm模式下實現對話的最佳方式。 我打算在我的應用程序中使用相當多的東西,所以我想要一些可重用的東西。

回答

2

由於您使用Prism/Unity實現視圖模型的中介模式。

  1. 將DialogService(IDialogService)模塊添加到您的項目中。
  2. 包含對話框的模塊使用IDialogService註冊它們。 不要忘記將DialogServiceModule聲明爲ModuleDependency。
  3. ViewModels現在使用IDialogService來顯示所需的對話框。

    public interface IDialogService 
    { 
        void RegisterDialog (string dialogID, Type type); 
        bool? ShowDialog  (string dialogID); 
    } 
    
    public class DialogService : IDialogService 
    { 
        private IUnityContainer  m_unityContainer; 
        private DialogServiceRegistry m_dialogServiceRegistry; 
    
        public DialogService(IUnityContainer unityContainer) 
        { 
         m_unityContainer = unityContainer; 
         m_dialogServiceRegistry = new DialogServiceRegistry(); 
        } 
    
        public void RegisterDialog(string dialogID, Type type) 
        { 
         m_dialogServiceRegistry.RegisterDialog(dialogID, type); 
        } 
    
        public bool? ShowDialog(string dialogID) 
        { 
         Type type = m_dialogServiceRegistry[dialogID]; 
         Window window = m_unityContainer.Resolve(type) as Window; 
         bool? dialogResult = window.ShowDialog(); 
    
         return dialogResult; 
        } 
    } 
    

如果使用視圖模型的事件處理程序&在視圖中,使用WeakEventHandler模​​式,以消除潛在的資源泄漏。 此外,可以將多個視圖附加到相同的ViewModel。 我已經使用一個ViewModel - >一個視圖來處理項目。但也有一個ViewModel - >多個視圖。 只是在做出設計決定時要考慮的事情。

2
+0

感謝您的參考。我跳躍有一個更優雅的實施使用行爲或其他WPF 4功能.. – 2013-02-11 12:49:32

+0

@Omribitan - 你會這樣想,不是嗎。這是MVVM和WPF的問題之一 - 你需要大量的第三方庫和/或代碼才能讓它認爲它應該是非常簡單的。 – Sean 2013-02-11 14:44:13

1

我讓視圖模型引發事件時,它需要獲取用戶信息。然後由View決定如何提供它。這確實意味着後面的代碼將獲得事件處理程序,但一些真正的MVVM嫺熟會發抖...