Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 装订词典<;字符串,列表<;类别>&燃气轮机;到多个TreeViewItem_C#_Wpf_Dictionary - Fatal编程技术网

C# 装订词典<;字符串,列表<;类别>&燃气轮机;到多个TreeViewItem

C# 装订词典<;字符串,列表<;类别>&燃气轮机;到多个TreeViewItem,c#,wpf,dictionary,C#,Wpf,Dictionary,因此,我有一些数据,我想存储在一个树状视图中,我有两个分支,但我坚持要得到更多。我认为字典是最好的,因为当我加入“健全性检查”时,将ID存储在密钥中是最容易的 我希望如何显示我的数据: --Internet Checks ----- 'Date, message, status' --------- 'Details' --Server Checks ----- 'Date, message, status' --------- 'Details' --Sanity Checks ----- '

因此,我有一些数据,我想存储在一个树状视图中,我有两个分支,但我坚持要得到更多。我认为字典是最好的,因为当我加入“健全性检查”时,将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; }
    }
公共类菜单项
{
公共菜单项()
{
this.SubItems=新字典();
}
公共字典子项{get;set;}
公共字符串文本{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;
        }
公共字典填充(字符串名称、字典根、列表)
{
Add(nextNum,newmenuitem{Text=name+“Checks”});
foreach(列表中的HealthCheckHourModel hchm)
{
if(hchm.Message.Contains(name))
{
root[nextNum].SubItems.Add(hchm.ID,新菜单项{Text=hchm.StartTime+“”+hchm.Message});
根目录[nextNum]。子项[hchm.ID]。子项。添加(-111,新菜单项{Text=hchm.Details});
}
}
下一步--;
返回根;
}

有两种可能性:

  • 删除HierarchycalDataTemplate的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保留为HierarchycalDataTemplate,但将DataTemplate替换为HierarchycalDataTemplate

    <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>
    
    
    

您需要一个递归算法来获得三个级别。当前代码只处理两个级别。