我有一个 TreeView ,它有三个级别。

让我们说它是一个联盟,分区和团队 TreeView

现在,当我选择树中的每个项目时,我希望看到有关它的详细信息。

实现这一目标的最佳途径是什么?

由于 Grid 不是项目(比如 ListBox ),我不能只设置它的 ItemsSource 并创建一个的DataTemplate ...

我考虑使用 ListBox ,它只包含所选项目,但这似乎非常糟糕......

感谢。

有帮助吗?

解决方案

首先为你的联赛,分区和团队类定义3 DataTemplate 。之后,将 TreeView 绑定到对象的根目录。您的League和Division类应该有一个返回子项的Children属性。你的所有类都应该有一个Name属性。

然后,当您想要显示单个对象时,使用 ContentPresenter ,并将其内容绑定到 SelectedItem (如果 TreeView )。

例如:

<StackPanel>
   <StackPanel.Resources>

       <DataTemplate DataType="{x:Type your_namespace:League}">
           <StackPanel Orientation="Vertical">
               <TextBlock Text={Binding Name}/>
               <.../>
           <StackPanel>
       </DataTemplate>

       <DataTemplate DataType="{x:Type your_namespace:Division}">
           <StackPanel Orientation="Vertical">
               <TextBlock Text={Binding Name}/>
               <.../>
           <StackPanel>
       </DataTemplate>

       <DataTemplate DataType="{x:Type your_namespace:Team}">
           <StackPanel Orientation="Vertical">
               <TextBlock Text={Binding Name}/>
               <.../>
           <StackPanel>
       </DataTemplate>

   </StackPanel.Resources>

   <TreeView x:Name="_tree" ItemsSource="{Binding RootOfYourItems}">
      <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <TextBlock Text={Binding Name}/>
        </HierarchicalDataTemplate>
   </TreeView>

   <ContentPresenter Content="{Binding Path=SelectedItem, ElementName=_tree}" />

</StackPanel>

此代码未经过测试或编译,仅作为示例提供。

其他提示

我会创建一个viewmodel,其中包含树结构的属性,当前选择以及当前选择的详细信息。

树结构是单向绑定到树视图,树视图中的SelectedItem是绑定到当前选择属性的OneWayToSource(由于属性的限制)。一旦当前选择发生更改,此属性将更改子项列表,并且子项将绑定到显示它们的列表框。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top