2011-09-02 13 views
0

我有一個帶有hierachial模板的Treeview。 一切工作正常。所有Objets將按預期做出迴應。 但是向集合添加元素不會更新樹視圖。帶數據綁定的TreeViewItem,Childs不更新

我的基礎對象綁定到樹視圖。 它的一個屬性包含一個集合。而這個系列已經擁有了一個擁有自己收藏的財產。

BaseObject 
    -> Sub Collection 1 
     -> SubCollection 2 

我BaseObject已經實現INotifyPropertyChanged的,我的子集合2已實施ICollectionChaged。儘管如此,wehen我嘗試添加一個新的Item到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"/> 

應訂閱類子集合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); 
     } 
     } 
} 
+0

請查看[編輯幫助](http://stackoverflow.com/editing-help),並在下次格式化您的代碼。 –

+0

好的,thx整理 – Lif3styl3

回答

0

我已經發現有很多是更多的接口來實現。最好的方法是可觀察的集合。 原因我不想更改我發現的所有課程ObservableDictionary 示例。