У меня есть вкладка с несколькими вкладками. Когда вкладка выбрана, я устанавливаю содержимое вкладки для соответствующей модели представления.
У меня также есть DataTemplate, определенный для модели базового представления, из которого все остальные модели представления получены из:
<DataTemplate DataType="{x:Type vm:BaseViewModel}">
<view:BaseView/>
</DataTemplate>
Таким образом, модели моего вида, которые почти идентичны, будут отображаться с использованием того же базового вида.
BaseView - это пользовательский элемент управления. В BaseView я определил Infragistics XamDataGrid. Кажется, что только один экземпляр этой сетки создан для всех моделей представлений, то есть я могу переключаться между вкладками столько раз, сколько захочу, но пользовательский элемент управления никогда не воссоздается с нуля.
Как WPF обрабатывает время жизни пользовательских элементов управления в сочетании с DataTemplates?
Проблема, которую я пытаюсь решить, заключается в том, что в xaml BaseView я определил поле в 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, и он не выбирает параметр Collapsed для IsDirty. В результате столбец IsDirty становится видимым. Я думал, что если я смогу заставить пользовательский элемент управления полностью воссоздаться, я мог бы избежать этой проблемы.