Ich habe eine XML, die databound zu einem sein muss WPF-Baumansicht . Hier kann das XML eine andere Struktur haben. Der TreeView sollte datengebunden und generisch genug sein, um jede Permutation der Hierarchie zu laden. Allerdings muss ein XAttribut auf den Knotenpunkten (genannt Titel ) sollte databound zu dem TreeViewItem's Kopftext y nicht der Node-Name .
XML, das gebunden werden soll:
<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's codebehind, das XML in XDocument lädt und es an TreeView bindet
public partial class TreeViewer : Window
{
public TreeViewer()
{
InitializeComponent();
XDocument doc = XDocument.Parse(File.ReadAllText(@"C:\MyWizard.xml"));
_treeView.DataContext = doc;
}
}
Im XAML Markup binden wir also Name an die Überschrift von TreeViewItem.
<TreeViewItem Header="{Binding Path=Name}"/>
Ich möchte es jedoch mit Titel Attribut von Abschnitt, Schleife und Seite in der obigen Xml-Datei. Ich habe gelesen, dass es nicht möglich ist, XPath beim Binden von XDocument zu verwenden. Aber es muss doch eine Möglichkeit geben, die Titel Attribut zum TreeViewItem's Header Text. Ich habe versucht, mit @Title, .[@Title] etc. Aber keine schien zu funktionieren.
Diese Thema in den MSDN-Foren hat eine ähnliche Diskussion.
Jeder Hinweis wäre sehr hilfreich.