2010-06-23 4 views
0

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.

Répondre

0

Désolé si je vous ai eu tort, mais

  • Si vous avez besoin d'accéder à des éléments de l'espace de noms par défaut comme xmlns = « ... », vous devez utiliser la syntaxe régulière comme Path = attribut [nom]. valeur

  • Si vous avez XML avec espace de noms avec préfixe, comme xmlns: ns = "..." et des éléments à l'intérieur de cet espace de noms comme, vous pouvez essayer d'utiliser le chemin = Elements [ "ns: livre"]

Espérons qu'il lps.

+0

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

+0

Voyez-vous cet article? http://msdn.microsoft.com/en-us/library/cc165615.aspx – STO

+0

Merci beaucoup pour votre aide. – mbadawi23

Questions connexes