WPF Treeview - 与ViewModel同步?

时间:2009-07-28 14:23:56

标签: wpf treeview synchronization listbox

我有一个包含两列网格的窗口。 第一列用TreeView填充。 第二列用ListBox填充。

两个控件都绑定到包装我的数据的CollectionView - 我的数据类类型的ObserveableCollection。 ListBox设置为与视图保持同步(SyncToCurrentItem等)。我还实现了一个自定义ListBoxItem,它调用BringIntoView并聚焦于新选择的项目。

但是,Treeview不支持针对CollectionView的此类操作。

有没有办法实现这个目标?我想要做的是在树中选择一些东西,并在ListBox中选择它。

提前感谢您的帮助。

1 个答案:

答案 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更新需要更多的工作,但它是可行的。如果你想要双管齐下,请告诉我。