我有一个带有几个标签的标签控件。选择选项卡后,我将选项卡的内容设置为其对应的视图模型。
我还为基本视图模型定义了一个DataTemplate,所有其他视图模型都来自:
<DataTemplate DataType="{x:Type vm:BaseViewModel}">
<view:BaseView/>
</DataTemplate>
这样,我的视图模型几乎相同,将使用相同的基本视图显示。
BaseView是一个用户控件。在BaseView中,我定义了一个Infragistics XamDataGrid。似乎只为所有视图模型创建了这个网格的一个实例,这意味着我可以根据需要在选项卡之间切换多次,但用户控件永远不会从头开始重新创建。
当与DataTemplates结合使用时,WPF如何处理用户控件的生命周期?
我想解决的问题是在BaseView的xaml中,我在XamDataGrid中定义了一个Field,如下所示:
<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列是可见的。我的想法是,如果我可以强制完全重新创建用户控件,我可以避免这个问题。
答案 0 :(得分:2)
将DataTemplate
添加到资源并设置x:Shared="false"