【问题标题】:WPF - XAML Treeview to Generic.List bindingWPF - XAML 树视图到 Generic.List 绑定
【发布时间】:2011-05-26 06:22:16
【问题描述】:

我正在尝试将 IList 绑定到分层显示中的 WPF TreeView。这是我的对象:

public class TeamsTreeViewItem
 {
  public string DisplayValue { get; set; }
  public string KeyValue { get; set; }

  readonly List<TeamsTreeViewItem> children = new List<TeamsTreeViewItem> ();

  public IList<TeamsTreeViewItem> Children
  {
   get
   {
    return children;
   }
  }

  public override string ToString ()
  {
   return DisplayValue;
  }
 }

我不知道一个特定的对象会有多少个孩子,孩子们也可能有孩子。

我对我的 HierarchialDataTemplate 大惊小怪,但没有成功:

    <TreeView Canvas.Left="263" Canvas.Top="12" Height="200" Name="TeamTreeView" Width="120">
        <TreeView.Resources>
            <HierarchicalDataTemplate  DataType="{x:Type local:TeamsTreeViewItem}" ItemsSource="{Binding DisplayValue}" >
                <TextBlock Text="{Binding DisplayValue}"/>
            </HierarchicalDataTemplate>
            <HierarchicalDataTemplate  DataType="{x:Type local:TeamsTreeViewItem}" ItemsSource="{Binding Children}" >
                <TextBlock Text="{Binding DisplayValue}"/>
            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>

有什么建议吗?

【问题讨论】:

  • 您应该只有一个 HierarchicalDataTemplate,因为您的所有节点都是 TeamsTreeViewItem,否则 WPF 将如何知道要使用哪一个?您还需要将 ItemsSource 绑定到 Children 集合: ItemsSource="{Binding Path=Children}"

标签: wpf xml binding treeview ilist


【解决方案1】:

您需要像这样将 ItemsSource 应用到孩子:

<HierarchicalDataTemplate DataType="{x:Type local:TeamsTreeViewItem}" ItemsSource="{Binding Path=Children}">
    <TextBlock Text="{Binding DisplayValue}"/>
</HierarchicalDataTemplate>

我根据 DataType 应用了这个 DataTemplate,这样如果孩子属于同一类型 (TeamsTreeViewItem),它应该自动将它应用到它找到的任何该类型的项目,即使它是孩子、孙子或伟大的伟大的伟大....孙子。只需确保包含定义 TeamsTreeViewItem 的命名空间(此处表示为“本地”)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2011-07-14
    • 2015-04-23
    相关资源
    最近更新 更多