【问题标题】:WPF DataTemplate and usercontrol lifetimeWPF DataTemplate 和用户控件生命周期
【发布时间】:2011-07-06 14:08:58
【问题描述】:

我有一个带有几个标签的标签控件。当一个选项卡被选中时,我将选项卡的内容设置为其对应的视图模型。

我还为所有其他视图模型派生的基本视图模型定义了一个 DataTemplate:

    <DataTemplate DataType="{x:Type vm:BaseViewModel}">
        <view:BaseView/>
    </DataTemplate>

这样,我几乎相同的视图模型将使用相同的基本视图显示。

BaseView 是一个用户控件。在 BaseView 中,我定义了一个 Infragistics XamDataGrid。似乎只为所有视图模型创建了这个网格的一个实例,这意味着我可以在选项卡之间切换任意多次,但用户控件永远不会从头开始重新创建。

当 WPF 与 DataTemplates 结合使用时,如何处理用户控件的生命周期?

我要解决的问题是,在 BaseView 的 xaml 中,我在 XamDataGrid 中定义了一个字段,如下所示:

<igDP:XamDataGrid.FieldLayouts>
  <igDP:FieldLayout>
    <igDP:FieldLayout.FieldSettings>
      <igDP:FieldSettings DataValueChangedNotificationsActive="true" 
              AllowCellVirtualization="False"
                          AllowResize="True"
                          AllowRecordFiltering="True"/>
      </igDP:FieldLayout.FieldSettings>
      <igDP:Field Name="IsDirty" Visibility="Collapsed"/>
  </igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>

IsDirty 列(所有视图模型都具有 IsDirty 属性)仅在第一次显示网格时正确折叠。当我单击另一个选项卡时,网格的数据源会发生变化,网格会创建一个新的 FieldLayout,并且它不会选择 IsDirty 的 Collapsed 设置。因此,IsDirty 列是可见的。我的想法是,如果我可以强制完全重新创建用户控件,我可以避免这个问题。

【问题讨论】:

    标签: wpf mvvm datatemplate infragistics xamdatagrid


    【解决方案1】:

    DataTemplate 添加到资源并设置x:Shared="false"

    【讨论】:

      猜你喜欢
      • 2013-01-23
      • 1970-01-01
      • 2013-07-22
      • 2010-10-15
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多