问题描述
|
我从静态服务中获取以下类型的xml数据:
<nodeData>
<nodeObject>
<nodeName>Node 1</nodeName>
<nodechildren>
<nodeObject>
<nodeName>Node 1-1</nodeName>
<nodechildren>
<nodeObject>
<nodeName>Leaf 1-1-1</nodeName>
</nodeObject>
<nodeObject>
<nodeName>Leaf 1-1-2</nodeName>
</nodeObject>
<nodeObject>
<nodeName>Leaf 1-1-3</nodeName>
</nodeObject>
<nodeObject>
<nodeName>schedule 4.pdf</nodeName>
</nodeObject>
</nodechildren>
</nodeObject>
<nodeObject>
<nodeName>Node 1-2</nodeName>
<nodechildren>
<nodeObject>
<nodeName>Leaf 1-2-1</nodeName>
</nodeObject>
</nodechildren>
</nodeObject>
</nodechildren>
</nodeObject>
<nodeObject>
<nodeName>Node 2</nodeName>
<nodechildren>
<nodeObject>
<nodeName>Node 2-1</nodeName>
<nodechildren>
<nodeObject>
<nodeName>Leaf 2-1-1</nodeName>
</nodeObject>
</nodechildren>
</nodeObject>
</nodechildren>
</nodeObject>
......
</nodeData>
所以我想获取树数据以填充sliverlight中的树视图。我所做的如下:
创建一个内部类:
public class nodeObject
{
public string nodeName { get; set; }
public IEnumerable<nodeObject> nodechildren { get; set; }
}
将Linq写为:
void proxy_DownloadStringCompleted(object sender,DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
XDocument xml = XDocument.Parse(e.Result);
var dataSource = (from results in xml.Descendants(\"nodeObject\")
select new nodeObject
{
nodeName = results.Element(\"nodeName\").Value.ToString(),nodechildren = this.GetChilden(results)
});
this.dataTree.ItemsSource = dataSource.ToList();
}
}
private IEnumerable<nodeObject> GetChilden(XElement parent)
{
return (from results in parent.Descendants(\"nodeObject\")
select new nodeObject
{
nodeName = results.Element(\"nodeName\").Value.ToString(),}).ToList<nodeObject>();
}
然后运行silverlight应用程序。数据在treevew中显示为(仅2个级别,重复很多):
Node 1
Node 1-1
Leaf 1-1-1
Leaf 1-1-2
Leaf 1-1-3
Node 1-2
Leaf 2-1-1
Node 1-1
Leaf 1-1-1
Leaf 1-1-2
Leaf 1-1-3
Node 1-2
Leaf 2-1-1
Node 1-2
Leaf 2-1-1
Node 2
Node 2-1
Leaf 2-1-1
Node 2-1
Leaf 2-1-1
但是预期的显示应该像(没有叶子):
Node 1
Node 1-1
Node 1-2
Node 2
Node 2-1
或喜欢(包括叶子):
Node 1
Node 1-1
Leaf 1-1-1
Leaf 1-1-2
Leaf 1-1-3
Node 1-2
Leaf 2-1-1
Node 2
Node 2-1
Leaf 2-1-1
如何解决这个问题?
解决方法
想通了:这是因为xaml中的绑定问题。 Linq查询很好。