我正在使用数据模板使用 PRISM 4 发现加载我的 View 。我需要多次创建 View / View 模型而不是重用现有实例,所以我在资源中设置了 x:Shared=false ,但它只对 View 模型有影响。我可以确认 View 模型未被重用,但 View 被重用。 View 构造函数仅在第一次调用时调用一次。我在这里读过类似的帖子,但他们的解决方案对我不起作用。我想知道我是否可以扩展资源加载器/定位器并确保它尊重 Shared 标志。
这是我的模板的定义方式:
<DataTemplate DataType="{x:Type CVM:MyViewModel}" x:Shared="False">
<V:MyView />
</DataTemplate>
最佳答案
所有 DataTemplate
包含是一个 'Template'
用于在对象(在您的情况下为 View 模型)进入 View 时创建必要的可视化树。
因此,如果只有你们中的一个 'MyViewModel'
对象在 View 中,则 View 的构造函数只会被调用一次(即使实例化了多个 Viewmodel)。如果您有多个 View 模型,那么 View 的构造函数将作为 DataTemplate
的模板被多次调用。被正确构造并添加到可视化树中(每个 ViewModel 一次)。
但是,如果您的 ItemsControl
(保存您的 View 模型)开启了虚拟化,那么可能只存在一个“容器”(简单来说就是您的数据模板),并且可以重复使用。
关于wpf - 数据模板 x :Shared=false has no impact on the view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10839633/