代码之家  ›  专栏  ›  技术社区  ›  Ran Sagy

wpf treeview-与ViewModel同步?

  •  2
  • Ran Sagy  · 技术社区  · 16 年前

    我有一个包含两列网格的窗口。 第一列用树视图填充。 第二列用列表框填充。

    这两个控件都绑定到包装数据的CollectionView,即数据类类型的ObserveableCollection。列表框设置为与视图保持同步(同步到当前项等)。我还实现了一个自定义的ListBoxItem,它调用BringintoView并将焦点放在一个新选择的项上。

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

    有没有办法做到这一点?我想做的是在树中选择一些东西,并在列表框中选择它。

    事先谢谢你的帮助。

    1 回复  |  直到 16 年前
        1
  •  4
  •   Mark Synowiec    16 年前

    要使列表框与TreeView保持同步,需要将其SelectedItem绑定到TreeView的SelectedItem。绑定模式必须是单向的,因为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}"/>
    

    我创建了一个带有名字和子类(列表)的基本类别类。用列表框更新TreeView需要做更多的工作,但这是可行的。如果你想走两条路,请告诉我。