wpf - 数据模板 x :Shared=false has no impact on the view

标签 wpf prism-4

我正在使用数据模板使用 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/

相关文章:

wpf - 多个用户控件共享集合依赖属性

.net - 是否有适用于 WPF 的(好的/免费的)VirtualizingWrapPanel?

wpf - 使用 prism 4 实现登录 View 的正确方法是什么

c# - WPFToolkit.Extended - 工具在哪里?

c# - 向串口发送数据时的异步数字时钟

c# - 如何在 MEF 中使用事件聚合器?

wpf - Prism v4 : Unity or MEF?

WPF、 Prism 、MEF。在模块中注册区域适配器?

c# - 在 XAML 中使用样式从设置中绑定(bind) Drawing.Color

wpf - Prism - 如何使用 MEF 在 ViewModel 中导入 IRegionManager