我有一个带有几个选项卡的选项卡控件。当一个选项卡被选中时,我将选项卡的内容设置为其对应的视图模型。
我还为所有其他视图模型派生的基本视图模型定义了一个 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 列是可见的。我的想法是,如果我可以强制完全重新创建用户控件,我可以避免这个问题。