Извините, мой вопрос почти идентичен this one, но поскольку он не получил жизнеспособного ответа, я надеюсь, что у кого-то есть свежие идеи.WPF TreeView привязана к ObservableCollection, не обновляя корневые узлы
У меня есть WPF TreeView, который связан с иерархией одного типа:
public class Entity
{
public string Title { get; set; }
public ObservableCollection<Entity> Children { get; set; }
}
Класс сущностей реализует INotifyPropertyChanged, но я опустил этот код для ясности.
TreeView привязан к ObservableCollection < Entity> и каждому экземпляру Entity предоставляет набор содержащихся экземпляров объекта с помощью его имущества Детей:
<TreeView ItemsSource="{Binding Path=Entities}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Entity}" ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=Title}" />
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
Первоначально TreeView связывается как ожидался, и корректно отображает многоуровневый иерархия. Кроме того, когда членство в одной из детских коллекций изменяется программно, изменения правильно отражаются в TreeView.
Однако изменения в членстве уровня члена корня ObservableCollection < Объект> не отображаются в TreeView.
Любые предложения будут оценены.
Спасибо, Tim
Спасибо, гениальный анализ! –
Вау, это сработало для меня. Почему это изменение работает? –
@Mike В примере [Bad] он создает новую сущность, тем самым нарушая привязку к оригиналу. В [хорошем] примере он просто очищает и добавляет элементы к нему, но сохраняет исходную коллекцию. –