是否为TreeViewItem指定其他数据元素?

时间:2018-06-21 22:01:39

标签: c# wpf treeview

我有一个具有多个级别的TreeView。我想将顶级项目分配为“父项”,以便在单击它们时可以看到set属性并更改在TabControl中选择的选项卡。

到目前为止,我能看到的唯一有用的设置是Uid,有没有办法为TreeViewItems添加额外的属性?我在考虑何时使用Javascript和CSS,以及如何向任何元素添加额外的data标签,并且不确定是否可以在C#中做到这一点

var serverGroupList = ServerDB.ExecuteDB("SELECT * FROM server_groups");
var json = JsonConvert.SerializeObject(serverGroupList);
dynamic dynJson = JsonConvert.DeserializeObject(json);

foreach (var item in dynJson)
{
    Console.WriteLine("Adding ServerGroup: " + item.name);
    ComboboxItem DropdownItem = new ComboboxItem();
    DropdownItem.Text = item.name.ToString();
    DropdownItem.Value = item.id;

    ServerGroupDropdown.Items.Add(DropdownItem);

    treeItem = new TreeViewItem();
    treeItem.Header = item.name;
    treeItem.Uid = item.id;
    var serverListResults = ServerDB.ExecuteDB("SELECT * FROM servers WHERE group_id = " + item.id);
    var serversJSON = JsonConvert.SerializeObject(serverListResults);
    dynamic servers = JsonConvert.DeserializeObject(serversJSON);
    foreach (var server in servers)
    {
        Console.WriteLine("Adding: " + server.name);
        treeItem.Items.Add(new TreeViewItem() { Header = server.name, Uid = server.id });
    }
    ServerList.Items.Add(treeItem);
}

1 个答案:

答案 0 :(得分:0)

wpf TreeView不仅可以显示每个项目的文本标题,还可以做更多的事情。请研究此CodeProject文章以获取概述:Basic Understanding of Tree View in WPF。使用绑定和模板时,无需在后面的代码中创建TreeViewItem(所有必要的属性都存储在数据项中。TreeView为每个数据项自动生成TreeViewItems,并且数据项与TreeViewItem.DataContext之间存在1:1的关系)< / p>

仍然要继续您当前的方法,请将所有其他数据存储在DataContext属性中:

treeItem = new TreeViewItem();
treeItem.Header = item.name;
treeItem.Uid = item.id;
treeItem.DataContext = item;

treeItem.Items.Add(new TreeViewItem { Header = server.name, Uid = server.id, DataContext = server });