Vin*_*Vin 4 c# data-binding wpf treeview xaml
我有一个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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
XAML的代码隐藏,它将XML加载到XDocument并将其绑定到TreeView
public partial class TreeViewer : Window
{
public TreeViewer()
{
InitializeComponent();
XDocument doc = XDocument.Parse(File.ReadAllText(@"C:\MyWizard.xml"));
_treeView.DataContext = doc;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,在XAML标记中,我们将Name绑定到TreeViewItem的标头.
<TreeViewItem Header="{Binding Path=Name}"/>
Run Code Online (Sandbox Code Playgroud)
但是,我想将它绑定到上面Xml中Section,Loop和Page的Title属性.我读到在绑定XDocument时不可能使用XPath.但必须有一种方法将Title属性绑定到TreeViewItem的Header文本.我尝试使用@Title,.[@ Title]等.但似乎都没有用.
任何指针都会非常有用.
Vin*_*Vin 10
华友世界!!! 我想出了如何绑定XAttribute.它不直观,也不容易想象.但这是如何做到的.
<TreeViewItem Header="{Binding Path=Attribute[Title].Value}"/>
Run Code Online (Sandbox Code Playgroud)
很难想象Title可以直接用在方括号中.
归档时间: |
|
查看次数: |
23697 次 |
最近记录: |