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

时间:2013-02-11 12:24:24

标签: c# wpf mvvm

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

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

3 个答案:

答案 0 :(得分:2)

这篇关于MVVM对话的文章你可能会觉得有用:http://www.codeproject.com/Articles/36745/Showing-Dialogs-When-Using-the-MVVM-Pattern

答案 1 :(得分:1)

我让ViewModel在需要获取用户信息时引发事件。然后由View查看如何提供它。这个确实意味着文件背后的代码将获得事件处理程序,真正的MVVM专家将会不寒而栗......

答案 2 :(得分:1)

由于您正在使用Prism / Unity,因此请为View Models实现中介模式。

  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;
        }
    }
    
  4. 如果您使用ViewModel事件& View中的处理程序,使用WeakEventHandler模​​式来消除潜在的资源泄漏。 此外,可以将多个视图附加到同一ViewModel。 我使用一个ViewModel工作过项目 - >一个视图。但也有一个ViewModel - >多个视图。 在做出设计决策时需要考虑的事项。