【问题标题】:TreeView with multiple ItemSources具有多个 ItemSources 的 TreeView
【发布时间】:2013-10-07 08:13:52
【问题描述】:

我需要在树视图中显示来自两个不同来源的项目。我怎样才能做到这一点?

详情: 项源 A:此项源将有一个标题,n 个子项,其中每个子项最多可以有 32 个子子项。

项目源 B:此项目源将有一个标题和 n 个子项。

我需要支持子项和子项的上下文菜单操作。

xaml 代码应该是什么样的,我的类的结构应该是什么?

我当前的结构只有一个 ItemSource,绑定代码如下所示

<TreeView.ItemTemplate>
  <HierarchicalDataTemplate ItemsSource="{Binding Slash}">
         <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Name}"/>
         </StackPanel>
    <HierarchicalDataTemplate.ItemTemplate>
       <DataTemplate DataType="{x:Type dt:Slash}">
           <StackPanel Orientation="Horizontal">
               <TextBlock Text="{Binding FullName}"/>
           </StackPanel>
       </DataTemplate>
    </HierarchicalDataTemplate.ItemTemplate>
  </HierarchicalDataTemplate>
</TreeView.ItemTemplate>

【问题讨论】:

    标签: wpf xaml binding itemsource


    【解决方案1】:

    大家可以看看我在this topic发的答案 如果你有任何问题,尽管问;)

    【讨论】:

    • 我的问题是两个项目来源的类型不同。所以添加一个类别根本不能解决问题
    • 您是否尝试堆叠两个树视图?
    • 我做不到。要求是仅使用一个电视控件来执行此操作
    • 您不能有两个 itemSource。因此,您必须将两个 itemsources 包装在一个对象中,并在数据模板中对其进行管理,该模板将为每个子列表创建一台电视。否则,您可能必须使用继承来使两个源具有相同的类型。
    【解决方案2】:

    您需要做的就是将两个集合放入一个“ObservableCollectioncollection and thenBindthat to theTreeView.ItemsSource”属性中。

    如果出于某种原因,您需要输入集合,那么您仍然有三个选择;要么对两个集合中的两种类型进行子类化,然后创建子类型的新集合;或者让它们都实现相同的接口并将其用作新集合的类型;或扩展 ObservableCollection 以允许集合接受这两种类型的对象,同时仍然在每个输入点检查它们的类型。

    【讨论】:

      猜你喜欢
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 2010-11-12
      相关资源
      最近更新 更多