我正在尝试将一个简单的树结构绑定到Win8(以前称为)Metro应用程序中的ItemsControl的itemsSource。 我的结构实现了INotifyPropertyChanged接口,并且当它的任何子节点发生变化时也会通知它。
我尝试制作一个转换器,它将我的树展平为ObservableCollection,但在创建绑定后,它不会刷新。
我做了以下测试项目以显示我想要的内容: https://skydrive.live.com/redir?resid=970FFC53F4B7A598!146
这个简单项目中的问题是,如果按下底部应用栏上的“添加”按钮,它会在层次结构中创建一个新子项,但ListView不会刷新。
我想念的是什么,或者我该怎么做?
答案 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
包装原始集合,通知将被保留。