在WPF中,如果我们已经知道某XML的格式,将其数据通过数据绑定在TreeView中呈现出来是非常简单的。通过Xpath和HierarchicalDataTemplate很容易实现。

但是,有时我们还需要将一个未知格式的xml文件绑定到TreeView。其实IE及那些XML工具都有这种功能:任意打开一个xml文件,都能以树型的格式的显示。

这种就是一种通用型的XML格式绑定了,由于XML格式未知,无法根据XPATH来生成模板,往往有点无从下手的感觉。这里给出了一个简单的示例:  


绑定任意格式的XML文档到WPF的TreeView_xml绑定任意格式的XML文档到WPF的TreeView_xml_02代码


<HierarchicalDataTemplate x:Key="NodeTemplate">

<TextBlock x:Name="text" Text="?" />

<HierarchicalDataTemplate.ItemsSource>

<Binding XPath="child::node()" />

</HierarchicalDataTemplate.ItemsSource>

<HierarchicalDataTemplate.Triggers>

<DataTrigger Binding="{Binding Path=NodeType}" Value="Text">

<Setter TargetName="text" Property="Text" Value="{Binding Path=Value}"></Setter>

</DataTrigger>

<DataTrigger Binding="{Binding Path=NodeType}" Value="Element">

<Setter TargetName="text" Property="Text" Value="{Binding Path=Name}"></Setter>

</DataTrigger>

</HierarchicalDataTemplate.Triggers>

</HierarchicalDataTemplate>

<XmlDataProvider x:Key="xmlDataProvider">

<x:XData>

<Root xmlns="">

<note>

<to>George</to>

<from>John</from>

<heading>Reminder</heading>

<body>Don't forget the meeting!</body>

</note>

</Root>

</x:XData>

</XmlDataProvider>

</Window.Resources>

<Grid >

<TreeView Name="treeView1" 

Background="AliceBlue" 

ItemsSource="{Binding Source={StaticResource xmlDataProvider}, XPath=*}" 

ItemTemplate= "{StaticResource NodeTemplate}"/>

</Grid> 


 这个例子比较简单,基本上看着就知道是怎么回事了。当然,其也只实现了最基本的信息的显示,在这里只是抛砖引玉,要实现更详细的信息显示还得进一步完善。