Мой TreeView привязан к ObservableCollection и использует HierarchicalDataTemplates.
Я получаю модели из веб-службы.
Только когда пользователи щелкают узел в дереве, вызов веб-службы будет отправляться для получения его дочерних элементов.
Мое приложение имеет TabControl, TreeView находится на одной вкладке, другая вкладка имеет сетку данных, некоторые данные выбираются из дерева.Если щелкнуть правой кнопкой мыши элемент в сетке данных, я хочу найти его в древовидной структуре.Но теперь проблема заключается в том, что, когда я повторяю древовидное представление, скажем, у меня есть элемент с именем
A.A1.A11
, и в моем TreeView есть 3 элемента в первомуровень:
A
B
C
когда я найду A.A1.A11 , я хочу развернуть A,A1 и выделите A11.
когда я итерирую древовидное представление, сначала я нахожу A, оно соответствует первому пути A.A1.A11, поэтому я отправляю запрос веб-службы для получения дочерних элементов A.
Как только я получаю это, DataContext TreeViewItem из A обновляется, но сам TreeViewItem нет.
Поэтому, когда я проверяю A.Items, он пуст, и итерация не может продолжаться.
Как я могу обновить TreeVuew & TreeViewItem при изменении его ItemsSource?
вот xaml для определения дерева
<TreeView x:Name="TreeRoot"
ItemsSource="{Binding RootItems}"
TreeViewItem.Expanded="TreeViewExpanded"
TreeView.SelectedItemChanged="TreeRootSelectedItemChanged"
ContextMenu="{StaticResource DataGridContextMenu}"
PreviewKeyDown="TreeViewKeyDown"
PreviewMouseLeftButtonDown="TreeViewPreviewLeftMouseButtonDown"
PreviewMouseMove="TreeViewPreviewMouseMove" >
<TreeView.Resources>
<HierarchicalDataTemplate
DataType="{x:Type m:TreeModelBase}"
ItemsSource="{Binding Children}">
<StackPanel>
<Image Source="{Binding ImageFilePath}" />
<TextBlock Text="{Binding Name}" />
<!-- other items removed for brevity -->
<StackPanel.Style>
<Style TargetType="{x:Type StackPanel}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}"
Value="True">
<Setter Property="Background" Value="DodgerBlue"/>
<Setter Property="TextBlock.Foreground"
Value="White"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsSelected}"
Value="False">
<Setter Property="Background" Value="White"/>
<Setter Property="TextBlock.Foreground"
Value="Black"/>
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>