【发布时间】:2015-02-11 23:43:36
【问题描述】:
我正在尝试制作一个表示文件数据的树视图。文件数据具有组织成三个不同部分的数据包:头信息、操作头和操作数据。 Header Info 和 Operation Header 中的数据包是一层深度,而 Operation Data 中的数据包被分组到列表中,所以我认为将其提高一层会更容易组织。这样您就可以弹出打开的数据,查看列表,然后弹出打开的列表以查看单个数据包。
这是我的 xaml:
<TreeView ItemsSource="{Binding TreeViewItems}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding TreeNodes}">
<TextBlock Text="{Binding Name}" />
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" />
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate>
<TextBlock Text="{Binding DataPackets.ItemName}"/>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
这是我们尝试绑定到分层数据模板的代码:
var childData = new Children();
result.OperationData.ToList().ForEach(x => childData.DataPackets.Add(x));
if (result.HeaderInfo.Any())
{
TreeViewItems.Add(new TreePair() { TreeNodes = result.HeaderInfoProperties.ToList(), Name = "Header Info" });
}
TreeViewItems.Add(new TreePair() { TreeNodes = result.OperationHeaderProperties.ToList(), Name = "Operation Header" });
TreeViewItems.Add(new TreePair() { TreeNodes = result.OperationDataProperties.ToList(), Children = new List<Children> {childData}, Name = "Operation Data" });
类
public class TreePair
{
public TreePair()
{
TreeNodes = new List<PropertyInfo>();
Children = new List<Children>();
}
public List<Children> Children { get; set; }
public List<PropertyInfo> TreeNodes { get; set; }
public string Name { get; set; }
}
public class Children
{
public Children()
{
DataPackets = new List<DataPacketBase>();
}
public string Name { get; set; }
public List<DataPacketBase> DataPackets { get; set; }
}
我显示了 Header info 和 operation header 的数据包,以及 Operation data 的列表名称,但没有一个子数据包出现。它们存在于 Children.DataPackets 对象中。
这是在输出窗口中抛出的: BindingExpression 路径错误:在 'object' 上找不到 'Children' 属性
第二个TextBlock是正确的,但是没有找到Children ItemSource,但是列表正在填充项目。
第二层缺少子名属性
【问题讨论】:
标签: c# wpf xaml data-binding treeview