c# - WPF:绑定(bind) TreeView

标签 c# .net wpf vb.net xaml

我有一个数据源:

private List<PlayData> _treeData = new List<PlayData>();

    private void Test()
    {
        _treeData.Add(new PlayData()
        {
            BoolList = new List<bool>() { true, false, true },
            Name = "A"
        });

        _treeData.Add(new PlayData()
        {
            BoolList = new List<bool>() { true, false, true },
            Name = "B"
        });

        DataContext = this;
    }

我如何在 XAML 中绑定(bind)它,以便 Name 是父项而 Bool 的列表是子项。我试过这个失败了:

    <TreeView x:Name="treeView" Height="200" ItemsSource="{Binding Path=TreeData}" >
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Path=BoolList, Mode=TwoWay}" >
                <TextBlock FontWeight="Bold" Text="{Binding Path=Name, Mode=TwoWay}" />
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView> 

最佳答案

从您的示例中不清楚您在做什么 - 但本质上

  1. 您必须在名为 TreeData 的代码中定义一个公共(public)属性(示例中缺少,但假设这是返回 _treeData 的属性)
  2. BoolList 需要是 TreeData 的子属性(似乎是这样)
  3. 您需要为 TreeView 中包含子元素的每个元素定义一个 HierarchicalTemplate。
  4. 为 TreeView 中不包含子元素的每个元素定义一个常规的DataTemplate

如果像您的情况一样有不同的数据类型,您需要声明对象的类型

 <HierarchicalDataTemplate DataType="{x:Type foo:PlayData}"
  ItemsSource="{Binding BoolList}">

如果可以有多个匹配项,模板的顺序很重要。

关于c# - WPF:绑定(bind) TreeView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4386792/

相关文章:

c# - 打开一个包含来自 gridview 单元格的详细信息的 ajax modalpopup

c# - 此 View 列表不允许编辑项目

c# - RowEditEnding 事件获取空值

c# - EF6 : Mapping to ViewModel Reusability

c# - 用于发送短信和电子邮件通知的 Azure 服务

c# - Word 2007 为操作形状但在 Word 2010 中正常工作的互操作代码引发异常

c# - PtrToStructure 抛出的参数异常

wpf - 如何隐藏空的TextBlock?

c# - 创建通用检索方法以返回 1 条记录

c# - 减少来自 HttpPostedFileBase 的图像大小(物理和尺寸)然后转换为 base64