我有一个包含两列网格的窗口。 第一列用TreeView填充。 第二列用ListBox填充。
两个控件都绑定到包装我的数据的CollectionView - 我的数据类类型的ObserveableCollection。 ListBox设置为与视图保持同步(SyncToCurrentItem等)。我还实现了一个自定义ListBoxItem,它调用BringIntoView并聚焦于新选择的项目。
但是,Treeview不支持针对CollectionView的此类操作。
有没有办法实现这个目标?我想要做的是在树中选择一些东西,并在ListBox中选择它。
提前感谢您的帮助。
答案 0 :(得分:4)
要使ListBox与TreeView保持同步,您需要将其SelectedItem绑定到TreeView的SelectedItem。绑定模式需要是OneWay,因为TreeView SelectedItem是只读的。这是一个例子:
<TreeView Name="CategoryTreeView" DockPanel.Dock="Top" MinHeight="50" MinWidth="100">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="x:Type local:Category"
ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=Name}"></TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<ListBox Name="CategoryList" SelectedItem="{Binding ElementName=CategoryTreeView, Path=SelectedItem, Mode=OneWay}"/>
我创建了一个带有Name和Children(List)的基本Category类。使用ListBox进行TreeView更新需要更多的工作,但它是可行的。如果你想要双管齐下,请告诉我。