我有一个带有层次模板的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);
}
}
}