Wpf 带数据绑定的TreeView项目,Childs不';t更新

Wpf 带数据绑定的TreeView项目,Childs不';t更新,wpf,data-binding,collections,treeview,datatemplate,Wpf,Data Binding,Collections,Treeview,Datatemplate,我有一个树状视图和一个分层模板。 一切正常。所有OBJET将按预期响应。 但是向集合中添加元素不会更新树视图 我的基本对象绑定到树视图。 它的一个属性包含一个集合。这个集合拥有一个拥有自己集合的属性 BaseObject -> Sub Collection 1 -> SubCollection 2 我的BaseObject实现了INotifyPropertyChanged,我的子集合2实现了ICollectionChaged 尽管如此,当我尝试向Collection

我有一个树状视图和一个分层模板。 一切正常。所有OBJET将按预期响应。 但是向集合中添加元素不会更新树视图

我的基本对象绑定到树视图。 它的一个属性包含一个集合。这个集合拥有一个拥有自己集合的属性

BaseObject
  -> Sub Collection 1
      -> SubCollection 2
我的BaseObject实现了INotifyPropertyChanged,我的子集合2实现了ICollectionChaged

尽管如此,当我尝试向CollectionChaged上的子集合2添加一个新项时,会调用它,但CollectionChanged保持为null,因此不会发生任何事情

TreeView模板:

<HierarchicalDataTemplate x:Key="SheetTreeTemplate" >
    <StackPanel Orientation="Horizontal">
        <Image Width="16" Height="16" Margin="3,0" Source="/Resources/Icons/page_green.png" />
        <TextBlock FontStyle="Italic">
            <TextBlock.Text>
                <MultiBinding StringFormat="{}Seite {0}">
                    <Binding Path="Name"/>
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </StackPanel>
</HierarchicalDataTemplate>

<HierarchicalDataTemplate x:Key="DocumentTreeTemplate" ItemsSource="{Binding Path=Sheets.Values}" ItemTemplate="{StaticResource SheetTreeTemplate}">
    <StackPanel Orientation="Horizontal">
        <Image Width="16" Height="16" Margin="3,0" Source="/Resources/Icons/folder.png" />
        <TextBlock FontStyle="Italic">
            <TextBlock.Text>
                <MultiBinding StringFormat="{}{0} {1}">
                    <Binding Path="DocTypName"/>
                    <Binding Path="ID"/>
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </StackPanel>
</HierarchicalDataTemplate>


<HierarchicalDataTemplate x:Key="PileTreeTemplate" ItemsSource="{Binding Path=Documents.Values}" ItemTemplate="{StaticResource DocumentTreeTemplate}">
    <StackPanel Orientation="Horizontal">
        <Image Width="16" Height="16" Margin="3,0" Source="/Resources/Icons/report.png" />
        <TextBlock FontStyle="Italic" Text="{Binding Path=Name}" />
    </StackPanel>
</HierarchicalDataTemplate>

TreeView本身:

<TreeView Style="{DynamicResource NavigationTree}" Name="tvw_mainMenu"  ItemsSource="{Binding Values}" ItemTemplate="{DynamicResource PileTreeTemplate}" SelectedItemChanged="tvw_mainMenu_SelectedItemChanged"/>

应订阅子集合2的类已更改:

class Sheets : Dictionary<String, Sheet> , INotifyCollectionChanged {

    public bool Add(String sKey, Sheet newSheet) {

            base.Add(sKey, newSheet);
            OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, new KeyValuePair<String, Sheet>(sKey, newSheet)));

      }
      public event NotifyCollectionChangedEventHandler CollectionChanged;

      protected virtual void OnCollectionChanged(NotifyCollectionChangedEventArgs e) {
         if (CollectionChanged != null) {
            CollectionChanged(this, e);
         }
      }
}
课程表:字典、INotifyCollectionChanged{
公共bool Add(字符串sKey、单张新闻纸){
添加(sKey,新闻纸);
OnCollectionChanged(新的NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add,新的KeyValuePair(sKey,newSheet));
}
公共事件通知CollectionChangedEventHandler CollectionChanged;
CollectionChanged上受保护的虚拟空间(NotifyCollectionChangedEventArgs e){
如果(CollectionChanged!=null){
集合更改(本,e);
}
}
}

我发现还有更多的接口需要实现。最好的方法是一个可观察的集合。 因为我不想改变我找到的所有课程 示例。

下次请查看并格式化代码。