如何从WPF中的对象列表创建树视图
我有一个引用ID、名称和ParentID的对象列表。我试图创建树视图。但它没有显示任何东西。你能帮我创建一个树状视图吗?我正在分享下面的代码如何从WPF中的对象列表创建树视图,wpf,Wpf,我有一个引用ID、名称和ParentID的对象列表。我试图创建树视图。但它没有显示任何东西。你能帮我创建一个树状视图吗?我正在分享下面的代码 public class WorkFlowScriptIDDataStore { public string Id; public string Name; public string ParentId; public List<WorkFlowScriptIDDataStore> Subcat
public class WorkFlowScriptIDDataStore
{
public string Id;
public string Name;
public string ParentId;
public List<WorkFlowScriptIDDataStore> Subcategories;
public void Clear()
{
Id = "";
Name = "";
ParentId = "";
}
}
private void PopulateTreeView()
{
List<WorkFlowScriptIDDataStore> localstore = new List<WorkFlowScriptIDDataStore>();
List<WorkFlowScriptIDDataStore> WorkFlowScriptIDDataList = new List<WorkFlowScriptIDDataStore>();
WorkFlowScriptIDDataList.Clear();
int i = 0;
foreach (string node in CurrentScriptids)
{
WorkFlowScriptIDDataList.Add(new WorkFlowScriptIDDataStore());
if (node.Contains(StatusCodes.TAC_TXT_SCENARIOINDEX))
{
datamgm = new TestScenarioConfigurationManager(LayoutConfigurationManager.GetInstance());
WorkFlowScriptIDDataList[i].Id = node;
WorkFlowScriptIDDataList[i].Name = datamgm.GetValue(node, "Name");
WorkFlowScriptIDDataList[i].ParentId = sessionmgm.ScriptID;
}
else if (node.Contains(StatusCodes.TAC_TXT_SEQUENCEINDEX))
{
datamgm = new TestSequenceConfigurationManager(LayoutConfigurationManager.GetInstance());
WorkFlowScriptIDDataList[i].Id = node;
WorkFlowScriptIDDataList[i].Name = datamgm.GetValue(node, "Name");
WorkFlowScriptIDDataList[i].ParentId = sessionmgm.ScriptID;
}
else if (node.Contains(StatusCodes.TAC_TXT_CASEINDEX))
{
datamgm = new TestCaseConfigurationManager(LayoutConfigurationManager.GetInstance());
WorkFlowScriptIDDataList[i].Id = node;
WorkFlowScriptIDDataList[i].Name = datamgm.GetValue(node, "Name");
WorkFlowScriptIDDataList[i].ParentId = sessionmgm.ScriptID;
}
else
{
datamgm = new TestStepConfigurationManager(LayoutConfigurationManager.GetInstance());
WorkFlowScriptIDDataList[i].Id = node;
WorkFlowScriptIDDataList[i].Name = datamgm.GetValue(node, "Name");
WorkFlowScriptIDDataList[i].ParentId = sessionmgm.ScriptID;
}
i++;
}
foreach (var item in WorkFlowScriptIDDataList)
{
localstore.Add(item);
}
while (StartWithTreeviewItem(localstore).Count > 0)
{
GetTreeviewItems(ref localstore);
}
//Creation -TreeView
IEnumerable<WorkFlowScriptIDDataStore> data = WorkFlowScriptIDDataList;
var lookup = data.ToLookup(foo => foo.ParentId,
foo => new TreeItem<object>() { Item = foo });
foreach (var node in lookup.SelectMany(x => x))
node.Children = lookup[((WorkFlowScriptIDDataStore)(node.Item)).Name];
var rootNodes = lookup[null];
treeView.ItemsSource = rootNodes;
}
private List<WorkFlowScriptIDDataStore> StartWithTreeviewItem(List<WorkFlowScriptIDDataStore> lst)
{
return lst.Where(item => item.Id.StartsWith("TSC") ||
item.Id.StartsWith("TSQ") || item.Id.StartsWith("TC")).ToList();
}
private void GetTreeviewItems(ref List<WorkFlowScriptIDDataStore> nodeList)
{
List<string> tempIDList = new List<string>();
List<string> tempPrereqList = new List<string>();
string currentID = string.Empty;
List<WorkFlowScriptIDDataStore> tempstore = new List<WorkFlowScriptIDDataStore>();
configdoc = XDocument.Load(FilePaths.appWorkflowPath + "Workflow" + ".xml");
for (int i = 0; i <= nodeList.Count; i++)
{
if (nodeList.Count > i)
{
if (nodeList.Count > 0)
{
if (nodeList[i].Id.StartsWith("TSC") ||
nodeList[i].Id.StartsWith("TSQ") || nodeList[i].Id.StartsWith("TC"))
{
foreach (XElement xe in configdoc.Descendants("TAWorkFlow"))
{
if (nodeList[i].Id == xe.Element("UniqueID").Value)
{
tempIDList = xe.Element("ScriptID").Value.Split(new char[] { ',' },
StringSplitOptions.RemoveEmptyEntries).ToList<string>();
tempPrereqList = xe.Element("Prerequisite").Value.Split(new char[] { ',' },
StringSplitOptions.RemoveEmptyEntries).ToList<string>();
break;
}
}
currentID = nodeList[i].Id;
tempIDList.Reverse();
tempPrereqList.Reverse();
int k = 0;
tempstore.Clear();
nodeList.RemoveAt(i);
foreach (string id in tempIDList)
{
tempstore.Add(new WorkFlowScriptIDDataStore());
tempstore[k].Id = id;
tempstore[k].Name = tempPrereqList[k];
tempstore[k].ParentId = currentID;
int j = i;
WorkFlowScriptIDDataList.Insert(j + 1, tempstore[k]);
nodeList.Insert(j, tempstore[k]);
j++;
k++;
}
}
}
}
}
}
公共类WorkflowScriptId数据存储
{
公共字符串Id;
公共字符串名称;
公共字符串ParentId;
公共列表子类别;
公共空间清除()
{
Id=“”;
Name=“”;
ParentId=“”;
}
}
私有void PopulateTreeView()
{
List localstore=new List();
List WorkFlowScriptIDDataList=新列表();
WorkFlowScriptIDDataList.Clear();
int i=0;
foreach(CurrentScriptId中的字符串节点)
{
WorkFlowScriptIDDataList.Add(新的WorkFlowScriptIDDataStore());
if(node.Contains(StatusCodes.TAC_TXT_SCENARIOINDEX))
{
datamgm=新的TestScenarioConfigurationManager(LayoutConfigurationManager.GetInstance());
WorkFlowScriptIDDataList[i].Id=node;
WorkFlowScriptIDDataList[i].Name=datamgm.GetValue(节点,“名称”);
WorkFlowScriptIDDataList[i].ParentId=sessionmgm.ScriptID;
}
else if(node.Contains(StatusCodes.TAC_TXT_SEQUENCEINDEX))
{
datamgm=新的TestSequenceConfigurationManager(LayoutConfigurationManager.GetInstance());
WorkFlowScriptIDDataList[i].Id=node;
WorkFlowScriptIDDataList[i].Name=datamgm.GetValue(节点,“名称”);
WorkFlowScriptIDDataList[i].ParentId=sessionmgm.ScriptID;
}
else if(node.Contains(StatusCodes.TAC\u TXT\u CASEINDEX))
{
datamgm=新的TestCaseConfigurationManager(LayoutConfigurationManager.GetInstance());
WorkFlowScriptIDDataList[i].Id=node;
WorkFlowScriptIDDataList[i].Name=datamgm.GetValue(节点,“名称”);
WorkFlowScriptIDDataList[i].ParentId=sessionmgm.ScriptID;
}
其他的
{
datamgm=新的TestStepConfigurationManager(LayoutConfigurationManager.GetInstance());
WorkFlowScriptIDDataList[i].Id=node;
WorkFlowScriptIDDataList[i].Name=datamgm.GetValue(节点,“名称”);
WorkFlowScriptIDDataList[i].ParentId=sessionmgm.ScriptID;
}
i++;
}
foreach(WorkFlowScriptIDDataList中的变量项)
{
localstore.Add(item);
}
while(StartWithTreeviewItem(localstore).Count>0)
{
GetTreeviewItems(参考localstore);
}
//创建-树视图
IEnumerable data=WorkFlowScriptIDDataList;
var lookup=data.ToLookup(foo=>foo.ParentId,
foo=>newtreeitem(){Item=foo});
foreach(查找中的var节点。SelectMany(x=>x))
node.Children=lookup[((WorkFlowScriptIDDataStore)(node.Item)).Name];
var rootNodes=lookup[null];
treeView.ItemsSource=根节点;
}
私有列表StartWithTreeItem(列表lst)
{
返回lst.Where(item=>item.Id.StartsWith(“TSC”)||
item.Id.StartsWith(“TSQ”)| item.Id.StartsWith(“TC”).ToList();
}
私有void GetTreeviewItems(参考列表节点列表)
{
List tempIDList=new List();
List tempPrereqList=新列表();
string currentID=string.Empty;
List tempstore=new List();
configdoc=XDocument.Load(filepath.appWorkflowPath+“Workflow”+“.xml”);
对于(int i=0;i i)
{
如果(nodeList.Count>0)
{
if(nodeList[i].Id.StartsWith(“TSC”)||
节点列表[i].Id.StartsWith(“TSQ”)| |节点列表[i].Id.StartsWith(“TC”))
{
foreach(configdoc.substands(“TAWorkFlow”)中的XElement xe)
{
if(nodeList[i].Id==xe.Element(“UniqueID”).Value)
{
tempIDList=xe.Element(“ScriptID”).Value.Split(新字符[]{',},
StringSplitOptions.RemoveEmptyEntries.ToList();
temprereqlist=xe.Element(“predition”).Value.Split(新char[]{','},
StringSplitOptions.RemoveEmptyEntries.ToList();
打破
}
}
currentID=nodeList[i].Id;
tempIDList.Reverse();
tempPrereqList.Reverse();
int k=0;
tempstore.Clear();
nodeList.RemoveAt(i);
foreach(临时列表中的字符串id)
{
添加(新的WorkFlowScriptIDDataStore());
tempstore[k].Id=Id;
tempstore[k].Name=tempPrereqList[k];
tempstore[k].ParentId=currentID;
int j=i;
WorkFlowScriptIDDataList.Insert(j+1,tempstore[k]);
节点列表插入(j,临时存储[k]);
j++;
k++;
}
}
}
}
}
}
您需要在WorkFlowScriptIDDataStore类中使用属性而不是变量。请尝试以下示例
<TreeView x:Name="treeView">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:WorkFlowScriptIDDataStore}" ItemsSource="{Binding Subcategories}">
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
WorkFlowScriptIDDataStore workFlowScriptIdDataStore = new WorkFlowScriptIDDataStore()
{
Id="1",
Name = "Name",
ParentId = "-1",
Subcategories = new List<WorkFlowScriptIDDataStore>()
{
new WorkFlowScriptIDDataStore()
{
Id="1",
Name = "Name23",
ParentId = "-1",
},
new WorkFlowScriptIDDataStore()
{
Id="2",
Name = "Name1",
ParentId = "-1",
},
}
};
List<WorkFlowScriptIDDataStore> lst = new List<WorkFlowScriptIDDataStore>() { workFlowScriptIdDataStore };
treeView.ItemsSource = lst;
}
}
public class WorkFlowScriptIDDataStore
{
public string Id { get; set; }
public string Name { get; set; }
public string ParentId { get; set; }
public List<WorkFlowScriptIDDataStore> Subcategories { get; set; }
public void Clear()
{
Id = "";
Name = "";
ParentId = "";
}
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
WorkFlowScriptIDDataStore WorkFlowScriptIDDataStore=新的WorkFlowScriptIDDataStore()
{