2012-05-31 73 views
5

我正在使用datatemplate使用PRISM 4發現來加載我的視圖。我需要多次創建view/viewmodel,而不是重複使用現有的實例,所以我在資源中設置了x:Shared = false,但它隻影響視圖模型。我可以證實viewmodel沒有被重用,但觀點是。視圖構造函數只在第一次調用時調用。我在這裏看過類似的帖子,但他們的解決方案對我無效。我想知道我是否可以擴展資源加載器/定位器,並確保它遵守共享標誌。DataTemplate x:Shared = false對視圖沒有影響

這裏是我的模板是如何定義的:

<DataTemplate DataType="{x:Type CVM:MyViewModel}" x:Shared="False"> 
     <V:MyView /> 
</DataTemplate> 
+0

任何解決方法,無需更改設計? – DotnetEng

+0

不知道,沒有用棱鏡,真的不能想到什麼高雅。 –

+0

在Prism中,您可以通過'PartCreationPolicy'屬性控制是否需要單身人士。 'Shared' =單身,'NonShared' =一個新的實例。你是否用'[PartCreationPolicy(CreationPolicy.NonShared)]'裝飾了你的視圖? –

回答

0

所有DataTemplate包含用於創建要當物體(在你的情況下,視圖模型)映入眼簾必要的視覺樹一'Template'

因此,如果只有其中一個'MyViewModel'對象在視圖中,那麼爲您查看的構造函數將只被調用一次(即使多個Viewmodel被實例化)。如果你有幾個viewmodel在視圖中,那麼當你的DataTemplate模板被正確構造並添加到Visual Tree(每個ViewModel一次)時,視圖的構造函數將被多次調用。但是,如果您的ItemsControl(包含您的視圖模型)已啓用虛擬化,則只有一個「容器」(簡稱爲您的數據模板)可能存在,並且可能會被重新使用。