我使用datatemplate使用PRISM 4发现来加载我的视图。我需要多次创建view / viewmodel而不是重用现有实例,因此我在资源中设置x:Shared = false但它只对viewmodel产生影响。我可以确认视图模型没有被重用,但视图是。视图构造函数仅在第一次调用时调用。我在这里看过类似的帖子,但他们的解决方案对我不起作用。我想知道我是否可以扩展资源加载器/定位器,并确保它尊重共享标志。
以下是我的模板的定义方式:
<DataTemplate DataType="{x:Type CVM:MyViewModel}" x:Shared="False">
<V:MyView />
</DataTemplate>
答案 0 :(得分:0)
所有DataTemplate
包含'Template'
,用于在对象(在您的情况下是视图模型)进入视图时创建必要的可视树。
因此,如果只有一个'MyViewModel'
个对象在视图中,那么您查看的构造函数将只被调用一次(即使实例化了多个Viewmodel)。如果您在视图中有多个视图模型,那么视图的构造函数将被多次调用,因为DataTemplate
的模板被正确构造并添加到可视树中(每个ViewModel一次)。
但是,如果您的ItemsControl
(包含您的视图模型)已启用虚拟化,则只有一个“容器”(简称为数据模板)可能存在,并且可能会被重复使用。 / p>