Возможно ли исключить WPF TabControl для выгрузки дочерних элементов TabItem при выборе другой вкладки?WPF TabControl: дети выгружаются, когда выбрана другая вкладка
Проблема я столкнулся похож на описанный здесь: WPF TabControl - Preventing Unload on Tab Change?
решение при условии, кажется, работает только если TabControl привязан к данным. Это не работает, если вы добавите TabItems:
<local:TabControlEx>
<TabItem Header="First Tab">
<TreeView ItemsSource="{Binding TreeNodes}" Unloaded="treeView_Unloaded">
<TreeView.Resources>
<DataTemplate DataType="{x:Type local:NodeViewModel}">
<TextBlock Text="{Binding NodeName}" />
</DataTemplate>
</TreeView.Resources>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
</TabItem>
<TabItem Header="Second Tab">
<TextBlock Name="txText2">Second Text 2</TextBlock>
</TabItem>
</local:TabControlEx>
При выборе «Вторая вкладка», treeView_Unloaded не будет запущена.
Фон: В моем реальном приложении один из TabItems содержит UserControl, содержащий связанный с данными TreeView: TreeViewItem.IsSelected привязан к свойству. Установка свойства, связанного с IsSelected, выбирает соответствующий TreeViewItem. Если пользователь переключается на другую вкладку, TreeView выгружается (удаляется из VisualTree). В этой ситуации установка IsSelected на true на любом узле, не имеющем соответствующий TreeViewItem, вызывает неправильное поведение TreeView - возможно, потому, что TreeView не создает TreeViewItem для узла, который должен быть выбран, потому что TreeView в настоящее время не является частью визуального дерева , Поэтому я хочу, чтобы я мог выбрать любой другой узел, установив IsSelected в true - даже если TreeView находится на невидимой вкладке. Перемещение TreeView в какое-то место вне TabControl, похоже, разрешает проблему - даже если она находится внутри панели, которая имеет видимость. Таким образом, видимость не кажется проблемой, но тот факт, что TreeView в настоящее время не является частью визуального дерева.