HierarchicalDataTemplate

HierarchicalDataTemplate

因此,我有一些要存储在树状视图中的数据,并且可以将其与2个分支一起使用,但我坚持要获得更多的数据。我认为最好使用字典,因为当我要添加“健全性检查”时,最容易将ID存储在密钥中

我希望如何显示数据:

--Internet Checks
----- 'Date, message, status'
--------- 'Details'
--Server Checks
----- 'Date, message, status'
--------- 'Details'
--Sanity Checks
----- 'Date, message, status'
--------- 'Details'
--------- 'Error1'
--------- 'Error2'
--------- 'Error3'
--------- 'etc'
--etc


这就是现在的样子

--Internet Checks
----- 'Date, message, status'
--Server Checks
----- 'Date, message, status'
--Sanity Checks
----- 'Date, message, status'
--etc


所以这是我现在的xaml的方式:

<TreeView Name="treeView1" ItemsSource="{Binding Items}">
                <TreeView.ItemTemplate>
                    <HierarchicalDataTemplate ItemsSource="{Binding Path=Value.SubItems}">
                        <TextBlock Text="{Binding Value.Text}" />
                        <HierarchicalDataTemplate.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Path=Value.Text}"/>
                            </DataTemplate>
                        </HierarchicalDataTemplate.ItemTemplate>
                    </HierarchicalDataTemplate>
                </TreeView.ItemTemplate>
            </TreeView>


这是我的MenuItem类:

public class MenuItem
    {
        public MenuItem()
        {
            this.SubItems = new Dictionary<int, MenuItem>();
        }

        public Dictionary<int, MenuItem> SubItems { get; set; }

        public string Text { get; set; }
    }


这是我目前如何填写字典的方法:

public Dictionary<int, MenuItem> Fill(string name, Dictionary<int, MenuItem> root, List<HealthCheckHourModel> list)
        {
            root.Add(nextNum, new MenuItem { Text = name + " Checks"});
            foreach (HealthCheckHourModel hchm in list)
            {
                if (hchm.Message.Contains(name))
                {
                    root[nextNum].SubItems.Add(hchm.ID, new MenuItem { Text = hchm.StartTime + " " + hchm.Message });
                    root[nextNum].SubItems[hchm.ID].SubItems.Add(-111, new MenuItem { Text = hchm.Details });
                }
            }
            nextNum--;
            return root;
        }

最佳答案

有两种可能性:


删除HierarchicalDataTemplate的ItemTemplate。

<TreeView Name="treeView1" ItemsSource="{Binding Items}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Path=Value.SubItems}">
            <TextBlock Text="{Binding Value.Text}" />
            <!--<HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=Value.Text}"/>
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>-->
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

将ItemTemplate保留为HierarchicalDataTemplate,但将DataTemplate替换为HierarchicalDataTemplate

<TreeView Name="treeView1" ItemsSource="{Binding Items}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Path=Value.SubItems}">
            <TextBlock Text="{Binding Value.Text}" />
            <HierarchicalDataTemplate.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Path=Value.SubItems}">
                    <TextBlock Text="{Binding Value.Text}" />
                </HierarchicalDataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

关于c# - 将Dictionary <string,List <Class >>绑定(bind)到多个TreeViewItem,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45820806/

10-09 05:01