如何根据TreeView中的选择填充DataGrid

时间:2011-06-23 05:06:10

标签: wpf xaml datagrid binding treeview

我有一个由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中使用吗?

1 个答案:

答案 0 :(得分:0)

如果有视图模型,我会做类似的事情:

<DataGrid ItemsSource="{Binding ElementName=tvMusicLibrary, Path=SelectedItem.Tracks />

其中Tracks集合将包含任何节点级别的曲目列表。

但是加载XML时,我不确定,我怀疑以下内容是否有效:

<DataGrid ItemsSource="{Binding ElementName=tvMusicLibrary, XPath=ARTIST/ALBUM/TRACK Path=SelectedItem />
相关问题