7

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

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

4

3 回答 3

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;
        }
    }
    

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

于 2013-02-12T11:35:20.133 回答
2

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

于 2013-02-11T12:42:19.140 回答
1

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

于 2013-02-11T13:31:19.190 回答