Thursday, October 18, 2007

Binding a XmlDocument to a TreeView in WPF

So I am working on a project in which I needed to bind a XmlDocument to a TreeView. After hours of staring at the XamlParseError exception (which gives you NO useful information), I finally figured out some of my problems. First off, in order to DataBind the source need to implement IEnumerable. Guess what?? XmlDocument doesn't implement it. So I tried different, to no avail, and I eventually just wrote a (*Gasp*), recursive function to transform a XmlDocument to a TreeView. Didn't think I would ever have to write one of those again! Here it is in all it's glory:

public void CopyXmlToTreeView( XmlNode xNode, ref TreeViewItem tviParent )
{
if (xNode == null)
{
return;
}
if (xNode.HasChildNodes)
{
foreach (XmlNode child in xNode.ChildNodes)
{
TreeViewItem tviChild = new TreeViewItem();
if (child.HasChildNodes)
{
tviChild.Header = child.Name;
tviChild.IsExpanded = true;
tviParent.Items.Add(tviChild);
CopyXmlToTreeView(child, ref tviChild);
}
else if (child.Value != null)
{
tviChild.Header = child.InnerText;
tviParent.Items.Add(tviChild);
}
}
}
}

My WPF Blog

So, in my adventures through learning WPF and .net I have had encountered many a problem. To solve these problems I have looked to the internet, for other people's solutions to these problems. So in the spirit of giving back I have decided to write this blog so that others can benefit from the problems I have already solved (Go Open Source!!) Hopefully someone will benefit from this, and feel free to email me or comment if you have any questions or suggestions!