C# 作为ItemsControl的树结构';s项目来源

C# 作为ItemsControl的树结构';s项目来源,c#,wpf,windows-8,windows-runtime,winrt-xaml,C#,Wpf,Windows 8,Windows Runtime,Winrt Xaml,我试图在Win 8(以前称为)Metro应用程序中将一个简单的树结构绑定到ItemsControl的itemsSource。 我的结构实现了INotifyPropertyChanged接口,并在其任何子项发生更改时发出通知 我试图制作一个转换器,它将我的树展平为一个可观察的集合,但是在创建绑定之后,它不会刷新 我做了以下测试项目来展示我想要的: 这个简单项目中的问题是,如果您按下底部应用程序栏上的“添加”按钮,它将在层次结构中创建一个新的子级,但ListView不会刷新 我错过了什么,或者我如

我试图在Win 8(以前称为)Metro应用程序中将一个简单的树结构绑定到ItemsControl的itemsSource。 我的结构实现了INotifyPropertyChanged接口,并在其任何子项发生更改时发出通知

我试图制作一个转换器,它将我的树展平为一个可观察的集合,但是在创建绑定之后,它不会刷新

我做了以下测试项目来展示我想要的:

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


我错过了什么,或者我如何做到这一点?

使用
数据模板应该相当简单,例如


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



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

是否可以发布一个包含CompositeCollection和CollectionContainers解决方案的示例?嗯。我想WinRT中没有CompositeCollection和CollectionContainer类。我的问题是,我有一个面板,它可以自定义它的子级布局。它很容易与ItemsControl一起使用,但是如果我使用上面的解决方案保持层次结构,我不知道如何进行布局。@adam_gav:不幸的是,您当然可以实现自己的布局。我认为我已经充分解释了转换器的问题,您需要保留对原始集合的引用,并对其
CollectionChanged
事件作出反应。复合集合的作用仅限于保管其子收藏的事件。