带有数据绑定的TreeViewItem,Childs不会更新

时间:2011-09-02 14:03:19

标签: wpf data-binding collections treeview datatemplate

我有一个带有层次模板的Treeview。 一切正常。所有Objets将按预期回应。 但是向集合添加元素不会更新树视图。

我的基础对象绑定到树视图。 其中一个属性包含一个集合。这个系列有一个属于自己的收藏品。

BaseObject
  -> Sub Collection 1
      -> SubCollection 2

我的BaseObject实现了INotifyPropertyChanged,我的SubCollection 2实现了ICollectionChaged。

尽管如此,我尝试向SubCollection 2添加一个新项目OnCollectionChaged被调用,但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"/>

应该订阅SubCollection 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);
         }
      }
}

1 个答案:

答案 0 :(得分:0)

我发现有更多的接口要实现。最好的方式是一个可观察的收藏品。 因为我不想改变我发现的所有课程ObservableDictionary  示例