Использование XPath с путем - PullRequest
       5

Использование XPath с путем

0 голосов
/ 03 января 2012

У меня есть TreeView , который связывается с XML-данными и одним DataGrid , который связывается с SelectedItem этого TreeView с использованием этого кода XAML:

<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']"

Как лучше всего решить эту проблему?

Или можно использовать ' SelectedEtem XPath вместо использования Path ?!

1 Ответ

1 голос
/ 03 января 2012

Используйте контекст данных, чтобы получить выбранный элемент, затем в источнике элементов можно сузить результаты по типу.

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

С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...