2011-05-04 85 views
4

我已經使用Unity構建了一個ViewModelLocator,並且已經成功地將它用於singleton ViewModel實例。例如:多實例視圖模型和ViewModelLocator

public class ViewModelLocator 
{ 
    private static readonly UnityContainer Container; 

    static ViewModelLocator() 
    { 
     Container = new UnityContainer(); 

     if (ViewModelBase.IsInDesignModeStatic) 
     { 
      //Design Time Data Services 
      Container.RegisterType<IMyServiceServiceAgent, DesignMyServiceServiceAgent>(); 
     } 
     else 
     { 
      //Real Data Services 
      Container.RegisterType<IMyServiceServiceAgent, MyServiceServiceAgent>(); 
     } 

     Container.RegisterType<TreeViewViewModel>(new ContainerControlledLifetimeManager()); 
    } 

    public TreeViewModel ViewModel 
    { 
     get 
     { 
      return Container.Resolve<TreeViewModel>(); 
     } 
    } 
} 

的ViewModelLocator被定義爲在App.xaml中的資源:

<Application.Resources> 
    <ResourceDictionary> 
     <VMS:ViewModelLocator x:Key="ViewModelLocator" d:IsDataSource="True"/> 
    </ResourceDictionary> 
</Application.Resources> 

,讓我綁定到視圖模型中的任何意見如下:

DataContext="{Binding TreeViewModel, Source={StaticResource ViewModelLocator}}" d:DataContext="{d:DesignInstance IsDesignTimeCreatable=False}" 

我的問題是我如何維護相同的ViewModel的多個實例相同的模式(和可混合性)?

我已經找到了我在這篇文章中想要做的參考 How to have multiple pairs "View-ViewModel"?但它沒有涉及到具體的實現。

我希望能夠做的是有不同的數據樹的這些Views/ViewModel對的多個實例,允許他們之間複製和粘貼等,但不能想到如何迎合ViewModelLocator中使用容器的特定實例?

我假設我需要按照上面提到的帖子收集某種ViewModels,但是如何將該收藏註冊到Unity容器中以及如何綁定到View中?

任何幫助,非常感謝。

+0

這是一個非常好的問題。我被卡住的方式與你一樣。我知道它已經4年了,但是你解決了這個問題嗎?你有什麼想法?我正在使用MVVM Light。 – 2015-02-24 15:18:26

回答

0

我在你的情況下做的是仍然有一個單一的ViewModel的視圖,但有另一個ViewModel保存的數據可以改變。例如,如果我有一個顯示用戶信息的UserView控件,我有一個通過ViewModelLocator綁定到該視圖的UserViewModel。我還有一個UserModel類,可以根據當前正在查看/編輯的用戶進行更改。此UserModel類繼承自ViewModelBase並由UserViewModel類通過屬性公開。在應用程序的其他地方,如果選擇了一個用戶,我將UserViewModel的用戶屬性設置爲我想要在UserView中顯示的UserModel。

+0

嗯,我可以看到這個工作的單個視圖,但我實際上需要有多個View/ViewModel實例,每個視圖綁定到特定的虛擬機。實際上,我試圖創建不同信息樹的MDI,並允許它們之間的拖放。 – 2011-06-28 15:02:03

相關問題