如何在MVVM中实现对话框架构

Omr*_*ian 7 c# wpf mvvm

我正在开发基于PRISM框架(Unity Container)的WPF 4.0-MVVM应用程序.

我想知道在mvvm模式中实现对话框的最佳方法是什么.我打算在我的应用程序中使用很多,所以我想要一些可重用的东西.

小智 2

由于您正在使用 Prism/Unity 为您的视图模型实现中介模式。

  1. 将 DialogService (IDialogService) 模块添加到您的项目中。
  2. 包含对话框的模块将它们注册到 IDialogService。不要忘记将 DialogServiceModule 声明为 ModuleDependency。
  3. ViewModel 现在使用 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;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

如果您在视图中使用 ViewModel 事件和处理程序,请使用 Wea​​kEventHandler 模式来消除潜在的资源泄漏。此外,多个视图可以附加到同一个视图模型。我曾经从事过使用一个 ViewModel -> 一个 View 的项目。而且还有一个 ViewModel -> 多个 View。只是在做出设计决策时需要考虑的一些事情。