6

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

这是我的模板的定义方式:

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

1 回答 1

0

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

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

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

于 2012-06-01T12:26:35.170 回答