我使用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)
所有DataTemplate包含的内容都是'Template'为了在对象(在您的情况下为视图模型)进入视图时创建必要的可视化树。
因此,如果视图中只有一个'MyViewModel'对象,则视图的构造函数只会被调用一次(即使实例化了多个 Viewmodel)。如果您的视图中有多个视图模型,那么当您的模板DataTemplate正确构建并添加到可视化树时,视图的构造函数将被多次调用(每个视图模型一次)。
但是,如果您的ItemsControl(保存视图模型的)已打开虚拟化,则只有一个“容器”(简单来说就是您的数据模板)可能存在,并且可以重复使用。