【发布时间】:2018-05-02 20:31:50
【问题描述】:
我有一个要绑定到 TreeView 的表。
NODE NAME PARENT
---- ----- -------
1 Bill NULL
2 Jane NULL
3 John 1
4 Mike 2
5 Bob 4
6 Jody 1
7 Larry 5
8 Heather 2
9 Steve 8
这是我的课:
public class Node
{
public int ID { get; set; }
public string Name { get; set; }
public int? Parent { get; set; }
public Node()
{
}
public Node(int id, string name)
{
ID = id;
Name = name;
Parent = null;
}
public Node(int id, string name, int? parent)
{
ID = id;
Name = name;
Parent = parent;
}
public override string ToString()
{
return string.Format("[{0}] {1}", ID, Name);
}
}
所以最终的结果应该是这样的:
---[1] Bill
|-----[3] John
|-----[4] Jody
---[2] Jane
|-----[4] Mike
| |------[5] Bob
| |------[7] Larry
|-----[8] Heather
|------[9] Steve
目前我正在使用后面的代码构建它。 首先,我找到所有没有父项的项目。然后从代码中将它们添加到 TreeView:
var TopNodes = Nodes.Where(n => n.Parent == null);
foreach (Node n in TopNodes)
{
TreeViewItem newItem = new TreeViewItem();
newItem.Tag = n.ID;
newItem.Header = n.Name;
newItem.Items.Add("..Loading..");
tvTest.Items.Add(newItem);
}
然后,当项目展开时,我填充父项,如下所示:
private void tvTest_Expanded(object sender, RoutedEventArgs e)
{
item.Items.Clear();
int parentID = (int)item.Tag;
var children = Nodes.Where(x => x.Parent == parentID);
foreach (Node n in children)
{
TreeViewItem newItem = new TreeViewItem();
newItem.Tag = n.ID;
newItem.Header = n.Name;
newItem.Items.Add("..Loading..");
item.Items.Add(newItem);
}
}
如果我可以直接绑定这些数据,我觉得我会有更大的灵活性。尤其是当我开始着手对数据实施 CRUD 功能时。
感谢您给我的任何建议。
【问题讨论】: