我正在开发一个基于 PRISM 框架(Unity Container)的 WPF 4.0 - MVVM 应用程序。
我想知道在 mvvm 模式中实现对话框的最佳方法是什么。我打算在我的应用程序中使用很多,所以我想要一些可重用的东西。
由于您使用的是 Prism/Unity,因此为您的视图模型实现了中介者模式。
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 事件和处理程序,请使用 WeakEventHandler 模式来消除潜在的资源泄漏。此外,可以将多个 View 附加到同一个 ViewModel。我用一个 ViewModel -> 一个 View 处理过项目。但也有一个 ViewModel -> 多个 Views。只是在做出设计决策时需要考虑的事情。
这篇关于 MVVM 对话框的文章可能对您有用: http: //www.codeproject.com/Articles/36745/Showing-Dialogs-When-Using-the-MVVM-Pattern
我让 ViewModel 在需要获取用户信息时引发事件。然后由 View 如何提供它。这确实意味着文件背后的代码将获得事件处理程序,但真正的 MVVM 专家会在......