我正在开发基于PRISM框架(Unity Container)的WPF 4.0 - MVVM应用程序。如何在MVVM中实现对话架构
我在想什么是在mvvm模式下实现对话的最佳方式。 我打算在我的应用程序中使用相当多的东西,所以我想要一些可重用的东西。
我正在开发基于PRISM框架(Unity Container)的WPF 4.0 - MVVM应用程序。如何在MVVM中实现对话架构
我在想什么是在mvvm模式下实现对话的最佳方式。 我打算在我的应用程序中使用相当多的东西,所以我想要一些可重用的东西。
由于您使用Prism/Unity实现视图模型的中介模式。
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 - >多个视图。 只是在做出设计决定时要考虑的事情。
我让视图模型引发事件时,它需要获取用户信息。然后由View决定如何提供它。这确实意味着后面的代码将获得事件处理程序,但一些真正的MVVM娴熟会发抖...
感谢您的参考。我跳跃有一个更优雅的实施使用行为或其他WPF 4功能.. – 2013-02-11 12:49:32
@Omribitan - 你会这样想,不是吗。这是MVVM和WPF的问题之一 - 你需要大量的第三方库和/或代码才能让它认为它应该是非常简单的。 – Sean 2013-02-11 14:44:13