我正在開發基於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