2011-06-23 44 views
0

我有一個XML文件填充一個TreeView如下:如何填充基於選擇一個DataGrid在一個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能在樹藝術家下面的每一張專輯充滿了每首歌曲,與列:曲目編號,歌曲名稱,藝術家,專輯

的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 /> 

在曲目集將包含在任何節點級別的曲目列表。

但隨着XML負載,我不知道,我懷疑下面的工作:

<DataGrid ItemsSource="{Binding ElementName=tvMusicLibrary, XPath=ARTIST/ALBUM/TRACK Path=SelectedItem /> 
相關問題