1

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

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

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

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

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

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

我要解决的问题是,在 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 列是可见的。我的想法是,如果我可以强制完全重新创建用户控件,我可以避免这个问题。

4

1 回答 1

2

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

于 2011-07-06T14:54:28.213 回答