抱歉 - 我的问题是几乎相同的这一个但因为它没有得到一个可行的答案,我希望别人有一些新的想法。

我有一个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,你将不会被分配一个新的对象来支持字段打破约束力。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top