【发布时间】:2015-07-06 09:36:39
【问题描述】:
我只是想在 TreeView 中显示分层数据,但我只是不知道如何使它显示比前两个级别更多。 (而且我几乎已经阅读了所有 TreeView 帖子,也许问题是我在这种情况下对绑定的(错过)轻描淡写)
我已经为这个测试简化了我的数据结构:
public class Node
{
public List<Node> Children { get; set; }
public Node Parent { get; set; }
public string Expression { get; set; }
}
Xaml 目前看起来是这样的:(请注意我现在已经更改了好几次,但这是我想出的原始状态:)
<Window x:Class="Klammern_Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Klammern_Test"
Title="MainWindow" Height="439" Width="402">
<Window.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Node}">
<TreeViewItem ItemsSource="{Binding Children}" Header="{Binding Expression}"/>
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>
<TreeView ItemsSource="{Binding Root}" Margin="12,41,12,12" Name="treeView" />
</Grid>
</Window>
这就是我尝试填充树视图的方式:
public partial class MainWindow : Window
{
public Node Root { get; set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
private void StartButton_Click(object sender, RoutedEventArgs e)
{
Parser = new StringParser();
Root = Parser.Parse(Tbx_Eingabe.Text);
treeView.Items.Add(PopulateTreeView(Root));
}
private TreeViewItem PopulateTreeView(Node node)
{
TreeViewItem treeViewItem = new TreeViewItem();
treeViewItem.IsExpanded = true;
treeViewItem.Header = node.Expression;
foreach (Node child in node.Children)
{
treeViewItem.Items.Add(new TreeViewItem() { Header = child.Expression });
if (child.Children.Count > 0)
{
PopulateTreeView(child);
}
}
return treeViewItem;
}
}
我错过了什么?
编辑:
在尝试了 almulo 的提示后,我用 Snoop-tool 找到了这个,但我完全不知道它是什么意思,我没有找到其他红线,并且根本没有进入 Binding Errors 列。
【问题讨论】:
-
Parser.Parse()返回什么?Root是什么类型的? -
它返回一个
Node,Root也是一个Node -
嗯,这可能是问题所在...
ItemsSource期待收集,Root是单个Node。我将在下面编辑我的答案。 -
哦,所以当我将 Root 更改为 List
时也许它会起作用? -
很高兴读到:)不客气!
标签: wpf .net-4.0 treeview hierarchicaldatatemplate