J'ai un cas d'utilisation où j'ai besoin de lier des données d'un fichier XML à un DataGrid WPF. J'ai préparé cet exemple pour montrer ce que je ferai dans mon code final.Comment lier XML avec un espace de noms à WPG DataGrid?
C'est Books.xml:
<?xml version="1.0" encoding="utf-8" ?>
<library>
<books>
<book id="1" name="The First Book" author="First Author">
First Book Content
</book>
<book id="2" name="The Second Book" author="Second Author">
Second Book Content
</book>
</books>
</library>
Et voici comment je lierai mon contrôle DataGrid. Première XAML:
<Window x:Class="LinqToXmlBinding.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
Title="Window1" Height="300" Width="400">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="268*" />
<ColumnDefinition Width="110*" />
</Grid.ColumnDefinitions>
<toolkit:DataGrid Name="xmlBoundDataGrid" Margin="1" ItemsSource="{Binding Path=Elements[book]}">
<toolkit:DataGrid.Columns>
<toolkit:DataGridTextColumn Header="Book ID" Binding="{Binding Path=Attribute[id].Value}"/>
<toolkit:DataGridTextColumn Header="Book Name" Binding="{Binding Path=Attribute[name].Value}"/>
<toolkit:DataGridTextColumn Header="Content" Binding="{Binding Path=Value}"/>
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
<StackPanel Name="myStackPanel" Grid.Column="1">
<Button Name="bindToXmlButton" Click="bindToXmlButton_Click">Bind To XML</Button>
</StackPanel>
</Grid>
</Window>
Ensuite, le code C#:
const string _xmlFilePath = "..//..//Books.xml";
private void bindToXmlButton_Click(object sender, RoutedEventArgs e)
{
XElement books = XElement.Load(_xmlFilePath).Element(myNameSpace + "books");
xmlBoundDataGrid.DataContext = books;
}
Maintenant, si je définissais un espace de noms XML à l'élément racine de books.xml être http://my.namespace.com/books
; Je sais que je peux obtenir cet espace de noms par programme comme ceci:
XNamespace myNameSpace = XElement.Load(_xmlFilePath).Attribute("xmlns").Value;
Mais, comment puis-je récupérer cet espace de noms en XAML afin d'accéder à l'élément « livre »? Et quelles sont les meilleures pratiques à cet égard?
Merci beaucoup.
Cela aiderait, mais XAML n'accepte pas "ns: book" avec des citations comme ça. Et supprimer les citations provoque une exception à être levée. J'ai aussi joué avec des choses autour de ton idée, mais pas de chance. Merci, et si vous avez d'autres idées, n'hésitez pas à nous en faire part. – mbadawi23
Voyez-vous cet article? http://msdn.microsoft.com/en-us/library/cc165615.aspx – STO
Merci beaucoup pour votre aide. – mbadawi23