2012-01-03 27 views
0

我有一个的TreeView结合XML数据和一个的DataGrid,使用这种XAML代码绑定到TreeView控件的的SelectedItem使用XPath与路径

<DataGrid Name="Dg1"> 
    <DataGrid.ItemsSource> 
     <Binding ElementName="treeView1" Path="SelectedItem.Elements[Book]" /> 
    </DataGrid.ItemsSource> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Id" Binding="{Binding Path=Attribute[id].Value}"/> 
     <DataGridTextColumn Header="Name" Binding="{Binding Path=Attribute[name].Value}"/> 
    </DataGrid.Columns> 
</DataGrid> 

这个XML:

<Books> 
    <Book id="123" name="Big Cat" type="t1" /> 
    <Book id="124" name="First Man" type="t1" /> 
    <Book id="125" name="Number One" type="t2" /> 
</Books> 

这工作正常,但我想过滤器使用的XPath路径一些条件设定图书但这不起作用:

XPath="Book[@type='t1']" 

,这是什么问题的最佳解决方案?

或者是有可能在的XPath,而不是使用路径使用 'SelectedEtem'?!

+0

是什么XML是什么样子? – 2012-01-03 05:58:40

+0

Q已更新。 – ARZ 2012-01-03 06:04:47

+0

ok和treeview Elements [Book]返回单个book元素? – 2012-01-03 06:14:38

回答

1

使用数据上下文获取选定的项目,然后在itemssource中,您可以按类型缩小结果。

<DataGrid DataContext="{Binding ElementName=treeView1, Path=SelectedItem.Elements[Book]}" ItemsSource="{Binding XPath=Book[@type\=\'t1\'] }" AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" Name="dataGrid1" VerticalAlignment="Top" Width="200" > 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Id" Binding="{Binding Path=Attribute[Id].Value}"/> 
       <DataGridTextColumn Header="Name" Binding="{Binding Path=Attribute[name].Value}"/> 
      </DataGrid.Columns> 

     </DataGrid> 

编辑:

<Grid> 
     <Grid.Resources> 
      <XmlDataProvider x:Key="InventoryData" XPath="Inventory/Books"> 
       <x:XData> 
        <Inventory xmlns=""> 
         <Books> 
          <Book id="123" name="Big Cat" type="t1" /> 
          <Book id="124" name="First Man" type="t1" /> 
          <Book id="125" name="Number One" type="t2" /> 
         </Books> 
        </Inventory> 
       </x:XData> 
      </XmlDataProvider> 
     </Grid.Resources> 
     <Button DataContext="{StaticResource InventoryData}" Tag="{Binding}" Content="Button" Height="23" HorizontalAlignment="Left" Margin="409,134,0,0" Name="button1" VerticalAlignment="Top" Width="75" /> 


     <DataGrid DataContext="{Binding ElementName=button1, Path=Tag}" ItemsSource="{Binding XPath=Book[@type\=\'t1\'] }" AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" Name="dataGrid1" VerticalAlignment="Top" Width="200" > 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Id" Binding="{Binding Path=Attributes[id].Value}"/> 
       <DataGridTextColumn Header="Name" Binding="{Binding Path=Attributes[name].Value}"/> 
      </DataGrid.Columns> 

     </DataGrid> 

    </Grid> 

问候

+0

这似乎是真实的方法,但不起作用:( – ARZ 2012-01-03 08:46:36

+0

即使放弃过滤条件,它也不起作用! – ARZ 2012-01-03 09:05:27

+0

那么你的selecteditem一定不能返回书目列表..我已经创建了一个测试项目,它工作 – 2012-01-03 09:12:01