以编程方式绑定到树视图在 UWP 中不起作用

我正在按照这篇文章尝试以编程方式将数据绑定到树视图(我在 1903)。


在一个全新的 UWP 应用程序中,我有以下代码:


public MainPage()

{

    this.InitializeComponent();


    var items = new List<Item>();

    var rootItem = new Item();

    rootItem.Name = "Root Item";

    rootItem.Children.Add(new Item() { Name = "test child 1" });

    items.Add(rootItem);


    var treeView = new TreeView();

    treeView.ItemsSource = items;

    stackPanel.Children.Add(treeView);

}

Item看起来像这样:


public class Item

{

    public string Name { get; set; }

    public ObservableCollection<Item> Children { get; set; } = new ObservableCollection<Item>();


    public override string ToString()

    {

        return Name;

    }

}

这似乎与上面文章中概述的结构完全相同。但是,当我运行该应用程序时,我得到以下信息:

https://img1.mukewang.com/64d8895b00017cca02620287.jpg

我的猜测是我需要做一些事情,或者设置一些东西来告诉这个树视图,或者它有子项的集合 - 但我看不出那可能是什么。



慕标琳琳
浏览 113回答 2
2回答

慕少森

您应该按照文档ItemTemplate中的说明创建一个。您可以使用XamlReader类以编程方式执行此操作。像这样的东西:const string Xaml = "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><TreeViewItem ItemsSource=\"{Binding Children}\" Content=\"{Binding Name}\"/></DataTemplate>"; treeView.ItemTemplate = XamlReader.Load(Xaml) as DataTemplate;

三国纷争

如果你使用C#构建TreeView,我建议使用遍历的方式添加TreeViewNode。由于缺少指示,TreeView 不会自动处理 Item 的 Children。在您提供的文档中,TreeView 有一个DataTemplate指令,因此子级可以渲染。您可以像这样更改代码:public MainPage(){&nbsp; &nbsp; this.InitializeComponent();&nbsp; &nbsp; var items = new List<Item>();&nbsp; &nbsp; var rootItem = new Item();&nbsp; &nbsp; rootItem.Name = "Root Item";&nbsp; &nbsp; rootItem.Children.Add(new Item() { Name = "test child 1" });&nbsp; &nbsp; items.Add(rootItem);&nbsp; &nbsp; var treeView = new TreeView();&nbsp; &nbsp; foreach (var root in items)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; var rootNode = new TreeViewNode() { Content = root.Name };&nbsp; &nbsp; &nbsp; &nbsp; if (root.Children.Count > 0)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach (var child in root.Children)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rootNode.Children.Add(new TreeViewNode() { Content = child.Name });&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; treeView.RootNodes.Add(rootNode);&nbsp; &nbsp; }&nbsp; &nbsp; stackPanel.Children.Add(treeView);}此致。
打开App,查看更多内容
随时随地看视频慕课网APP