2012-01-03 28 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