树结构作为ItemsControl的ItemsSource

时间:2012-08-31 09:41:03

标签: c# wpf windows-8 windows-runtime winrt-xaml

我正在尝试将一个简单的树结构绑定到Win8(以前称为)Metro应用程序中的ItemsControl的itemsSource。 我的结构实现了INotifyPropertyChanged接口,并且当它的任何子节点发生变化时也会通知它。

我尝试制作一个转换器,它将我的树展平为ObservableCollection,但在创建绑定后,它不会刷新。

我做了以下测试项目以显示我想要的内容: https://skydrive.live.com/redir?resid=970FFC53F4B7A598!146

这个简单项目中的问题是,如果按下底部应用栏上的“添加”按钮,它会在层次结构中创建一个新子项,但ListView不会刷新。

我想念的是什么,或者我该怎么做?

1 个答案:

答案 0 :(得分:1)

使用DataTemplate,例如

,这应该相当简单
<DataTemplate DataType="{x:Type local:TreeItemType}">
    <StackPanel>
        <ContentPresenter Content="{Binding Name}"/>
        <ItemsControl ItemsSource="{Binding Children}"/>
    <StackPanel>
<DataTemplate>

通过ItemsControl.Resources隐式应用它(因此它也会应用于内部ItemsControl


如果你只想要叶子或者不是单个单元的问题你可以构造一个CompositeCollection,而不是转换器创建一个永远不会被修改的ObservableCollection因为只有视图有一个引用它,您可以通过CollectionContainers包装原始集合,通知将被保留。