2011-06-23 38 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 /> 
相关问题