Как заполнить DataGrid на основе выбора в TreeView - PullRequest
0 голосов
/ 23 июня 2011

TreeView заполнен XML-файлом следующим образом:

<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 будет заполненс каждой песней в каждом альбоме ниже этого исполнителя в дереве, со столбцами: номер дорожки, название дорожки, исполнитель, альбом

XML имеет структуру:

<LIBRARY>
    <ARTIST>
        <NAME>Artist1</NAME>
        <ALBUM>
            <TITLE>Album1</TITLE>
            <TRACK>
                <NUMBER>01</NUMBER>
                <TITLE>Track1</TITLE>
            </TRACK>
        </ALBUM>
    </ARTIST>
</LIBRARY>

Возможно ли этотолько в XAML?

1 Ответ

0 голосов
/ 23 июня 2011

Если бы была модель вида, я бы сделал что-то вроде:

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

где коллекция треков будет содержать список треков на любом уровне узла.

Но с загрузкой в ​​XML я не уверен, я сомневаюсь, что будет работать следующее:

<DataGrid ItemsSource="{Binding ElementName=tvMusicLibrary, XPath=ARTIST/ALBUM/TRACK Path=SelectedItem />
...