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

Dot*_*Eng 5 wpf prism-4

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

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

 <DataTemplate DataType="{x:Type CVM:MyViewModel}" x:Shared="False">
        <V:MyView />
 </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

Dea*_*alk 0

所有DataTemplate包含的内容都是'Template'为了在对象(在您的情况下为视图模型)进入视图时创建必要的可视化树。

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

但是,如果您的ItemsControl(保存视图模型的)已打开虚拟化,则只有一个“容器”(简单来说就是您的数据模板)可能存在,并且可以重复使用。