我正在尝试学习如何将以下简单的XML文件绑定到WPF TreeView
:
<?xml version="1.0" encoding="utf-8" ?>
<Profiles>
<Customer>
<Name>Customer1</Name>
<Profile>
<Version>1.0</Version>
<DisplayText>DisplayText1</DisplayText>
</Profile>
<Profile>
<Version>1.0</Version>
<DisplayText>DisplayText2</DisplayText>
</Profile>
</Customer>
<Customer>
<Name>Customer2</Name>
<Profile>
<Version>1.0</Version>
<DisplayText>DisplayText3</DisplayText>
</Profile>
</Customer>
</Profiles>
以下是我尝试的XAML代码:
<TreeView DockPanel.Dock="Left" Height="auto" Name="treeView1" Width="217"
SelectedItemChanged="UIProfileTreeViewSelectedItemChanged"
ItemsSource="{Binding}">
<TreeView.DataContext>
<XmlDataProvider Source="Profiles.xml" XPath="/Profiles/Customer"/>
</TreeView.DataContext>
<TreeView.Resources>
<DataTemplate DataType="Customer">
<TreeViewItem Header="{Binding XPath=Name}"
ItemsSource="{Binding XPath=Profile}"/>
</DataTemplate>
<DataTemplate DataType="Profile">
<TreeViewItem Header="{Binding XPath=DisplayText}" />
</DataTemplate>
</TreeView.Resources>
</TreeView>
然而,结果阻止我在TreeView
中选择客户下的个人资料,如果我点击一个资料,整个群组会突出显示如下:
alt text http://img38.imageshack.us/img38/4484/sberr.png
我明显对数据绑定项的工作方式存在概念错误。有什么指针吗?
答案 0 :(得分:1)
我能够使用下面的xaml。
我的代码遇到了两个基本问题:
我在使用TreeViewItems完成选择时遇到了麻烦,但是在转换DataTemplates以显示Label之后(你可以在这里显示任何类型的简单或复杂的控件),它完美地运行了。 WPF会自动插入“TreeViewItem”控件来包装绑定到TreeView中的任何内容,因此您无需明确地执行此操作。
<TreeView DockPanel.Dock="Left" Height="auto" Name="treeView1" Width="217" SelectedItemChanged="UIProfileTreeViewSelectedItemChanged" ItemsSource="{Binding}">
<TreeView.DataContext>
<XmlDataProvider Source="Profiles.xml" XPath="/Profiles/Customer"/>
</TreeView.DataContext>
<TreeView.Resources>
<HierarchicalDataTemplate DataType="Customer" ItemsSource="{Binding XPath=Profile}">
<Label Content="{Binding XPath=Name}" />
</HierarchicalDataTemplate>
<DataTemplate DataType="Profile">
<Label Content="{Binding XPath=DisplayText}" />
</DataTemplate>
</TreeView.Resources>
</TreeView>
希望这有帮助!