DataTemplate x:Shared = false对视图没有影响

时间:2012-05-31 18:59:56

标签: wpf prism-4

我使用datatemplate使用PRISM 4发现来加载我的视图。我需要多次创建view / viewmodel而不是重用现有实例,因此我在资源中设置x:Shared = false但它只对viewmodel产生影响。我可以确认视图模型没有被重用,但视图是。视图构造函数仅在第一次调用时调用。我在这里看过类似的帖子,但他们的解决方案对我不起作用。我想知道我是否可以扩展资源加载器/定位器,并确保它尊重共享标志。

以下是我的模板的定义方式:

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

1 个答案:

答案 0 :(得分:0)

所有DataTemplate包含'Template',用于在对象(在您的情况下是视图模型)进入视图时创建必要的可视树。

因此,如果只有一个'MyViewModel'个对象在视图中,那么您查看的构造函数将只被调用一次(即使实例化了多个Viewmodel)。如果您在视图中有多个视图模型,那么视图的构造函数将被多次调用,因为DataTemplate的模板被正确构造并添加到可视树中(每个ViewModel一次)。

但是,如果您的ItemsControl(包含您的视图模型)已启用虚拟化,则只有一个“容器”(简称为数据模板)可能存在,并且可能会被重复使用。 / p>