我有一个由XML文件填充的TreeView,如下所示:
<Window.Resources>
<XmlDataProvider x:Key="xdpMusicLibrary" Source="MusicLibrary.xml" XPath="LIBRARY" />
<HierarchicalDataTemplate x:Key="hdtTrack">
<!-- From ... <TRACK><TITLE>Track Title</TITLE> ... -->
<TextBlock Text="{Binding XPath=TITLE/text()}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="hdtAlbum"
ItemTemplate="{StaticResource hdtTrack}"
ItemsSource="{Binding XPath=TRACK}">
<!-- From ... <ALBUM><TITLE>Album Title</TITLE> ... -->
<TextBlock Text="{Binding XPath=TITLE/text()}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="hdtArtist"
ItemTemplate="{StaticResource hdtAlbum}"
ItemsSource="{Binding XPath=ALBUM}">
<!-- From ... <ARTIST><NAME>Artist Name</NAME> ... -->
<TextBlock Text="{Binding XPath=NAME/text()}" />
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TreeView Grid.Column="0" Name="tvMusicLibrary"
ItemsSource="{Binding Source={StaticResource xdpMusicLibrary}, XPath=ARTIST}"
ItemTemplate="{StaticResource hdtArtist}" />
我希望DataGrid显示在TreeView中选择的节点(例如,如果我选择了一个艺术家,DataGrid将填充树中该艺术家下面的每个专辑中的每首歌曲,其中包含以下列:Track Number,Track标题,艺术家,专辑
XML的结构如下:
<LIBRARY>
<ARTIST>
<NAME>Artist1</NAME>
<ALBUM>
<TITLE>Album1</TITLE>
<TRACK>
<NUMBER>01</NUMBER>
<TITLE>Track1</TITLE>
</TRACK>
</ALBUM>
</ARTIST>
</LIBRARY>
这只能在XAML中使用吗?
答案 0 :(得分:0)
如果有视图模型,我会做类似的事情:
<DataGrid ItemsSource="{Binding ElementName=tvMusicLibrary, Path=SelectedItem.Tracks />
其中Tracks集合将包含任何节点级别的曲目列表。
但是加载XML时,我不确定,我怀疑以下内容是否有效:
<DataGrid ItemsSource="{Binding ElementName=tvMusicLibrary, XPath=ARTIST/ALBUM/TRACK Path=SelectedItem />