我有一个XML需要绑定到一个WPF TreeView中。这里XML可以有不同的结构。TreeView应该绑定通用,以加载任何层次的排列。然而,节点上的 XAttribute (称为 Title )应该绑定到TreeViewItem的头部文本,而不是节点名称。
XML 绑定:
<Wizard>
<Section Title="Home">
<Loop Title="Income Loop">
<Page Title="Employer Income"/>
<Page Title="Parttime Job Income"/>
<Page Title="Self employment Income"/>
</Loop>
</Section>
<Section Title="Deductions">
<Loop Title="Deductions Loop">
<Page Title="Travel spending"/>
<Page Title="Charity spending"/>
<Page Title="Dependents"/>
</Loop>
</Section>
</Wizard>
XAML:
<Window x:Class="Wpf.DataBinding.TreeViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Wpf.DataBinding"
Title="TreeViewer" Height="300" Width="300">
<Window.Resources>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Elements}" x:Key="TVTemplate">
<TreeViewItem Header="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
</Window.Resources>
<StackPanel>
<TreeView x:Name="_treeView" Style="{StaticResource TVallExpanded}"
ItemsSource="{Binding Path=Root.Elements}"
ItemTemplate="{StaticResource TVTemplate}" />
</StackPanel>
</Window>
XAML的Codebehind加载XML到XDocument,并将其绑定到TreeView。
public partial class TreeViewer : Window
{
public TreeViewer()
{
InitializeComponent();
XDocument doc = XDocument.Parse(File.ReadAllText(@"C:MyWizard.xml"));
_treeView.DataContext = doc;
}
}
因此,我们在XAML标记中将名称绑定到TreeViewItem的标题。
<TreeViewItem Header="{Binding Path=Name}"/>
然而,我想将它绑定到上述 Xml 中的节、循环和页面的标题属性。我读过,绑定XDocument时不可能使用XPath。但是一定有一种方法可以将标题属性绑定到TreeViewItem的标题文本上。我尝试使用@Title、.[@Title]等,但似乎都不起作用。
这个MSDN论坛上的帖子有类似的讨论。
任何指引都将非常有帮助。