WPF树视图绑定到的ObservableCollection不更新根节点
-
22-09-2019 - |
题
抱歉 - 我的问题是几乎相同的这一个但因为它没有得到一个可行的答案,我希望别人有一些新的想法。
我有一个WPF的TreeView绑定到单一类型的层次结构:
public class Entity
{
public string Title { get; set; }
public ObservableCollection<Entity> Children { get; set; }
}
实体类实现INotifyPropertyChanged,但我已经为了清楚省略了该代码。
在树视图绑定到一个ObservableCollection <实体>并且每个实体例如经由其Children属性公开了一组包含的实体的实例:
<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 <实体>的成员不会反映在树视图。
任何建议,将不胜感激。
谢谢, 添
解决方案
我最初的猜测是,你有什么样的根节点以下内容:
public ObservableCollection<Entity> Entities
{
get;
set;
}
然后,代替做某事[好]如下所示:
Entities.Clear();
foreach (var item in someSetOfItems)
Entities.Add(item);
您正在做的事情[衰]是这样的:
Entities = new ObservableCollection<Entity>(someSetOfItems);
您应该能够通过使实体财产readonly
的支持字段追查问题:
private readonly ObservableCollection<Entity> _entities
= new ObservableCollection<Entity>();
public ObservableCollection<Entity> Entities
{
get
{
return _entities;
}
}
其他提示
进一步的解释,时间长了答案来,但我相信,如果你绑定在XAML,然后在代码分配一个新的对象,你打破了绑定,所以你就必须重做绑定属性它的工作代码。因此与只读支持字段的溶液。如果做这样,你将无法分配一个新的ObservableCollection,你将不会被分配一个新的对象来支持字段打破约束力。
不隶属于 StackOverflow