2010-12-10 93 views
0

我有一個棱鏡/ silverlight視圖,它被映射到我的shell的選項卡控件中的tabitem。 看起來像這樣。在Prism/Silverlight中創建視圖模型的多個實例

<sdk:TabControl> 
    <sdk:TabItem Header="User Portfolio" Regions:RegionManager.RegionName="MainRegion" /> 
    <sdk:TabItem Header="Benchmark Portfolio" Regions:RegionManager.RegionName="BenchRegion" /> 
</sdk:TabControl> 

視圖包括一個數據網格,文本框和一個按鈕,使得所述數據網格映射到在視圖模型一個ObservableCollection和按鈕被點擊時,在文本框中的文本被添加到數據網格(以及對應的採集)。

現在,我想聲明這個view-viewmodel對的多個實例。也就是說,在tabitem「MainRegion」中我想要一個實例。在tabitem「BenchRegion」我想要另一個實例

我該怎麼做?

回答

0

您需要獲取容器,並且對於視圖模型的每個實例,您需要使用IUnityContainer.ResolveType<>()來初始化實例(確保先註冊您的類型IUnityContainer.RegisterType<>())。你可以將ResolveType<>()想象成Prism構造函數的形式。然後,對於每個視圖,您需要將datacontext設置爲該視圖的初始化視圖模型。

編輯我應該注意到,這是爲棱鏡2.0我知道,與棱鏡4.0有替代統一。

+0

雖然這可能是隱含的,但最後,您需要將每個視圖添加到相應的區域。另一種方法是將視圖類型註冊到每個區域;這樣,當顯示區域時,將爲每個區域自動創建視圖實例(並且,如果視圖模型作爲視圖的依賴關係,視圖模型正確地完成)。 – 2010-12-21 14:50:16

+0

是的,我認爲如果他使用的地區,他知道將視圖添加到區域:) – 2010-12-21 17:27:57

相關問題