2012-05-31 48 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(包含您的视图模型)已启用虚拟化,则只有一个“容器”(简称为您的数据模板)可能存在,并且可能会被重新使用。