2010-06-23 13 views
0

Je vais avoir un peu o » ennuis ...problème dans ListBox ItemTemplate liaison en utilisant XML comme ItemsSource

Voici mon fichier "mappings.xml" ...

<?xml version="1.0" encoding="utf-8"?> 
<mappings> 
    <mapping QID="info1"> 
    <empty></empty> 
    </mapping> 
    <mapping QID="info2"> 
    <empty></empty> 
    </mapping> 
</mappings> 

Ma méthode charge le XML et définit comme le ItemsSource pour la zone de liste:
(note: Je n'ai pas utilisé <XMLDataProvider> en XAML, car il offre un ensemble de XML.XMLElement, plutôt que le XElement LINQ Compatible Je veux travailler avec

Private Property myCollectionView as CollectionView 
Private Property mappingsEnum as IEnumerable(Of System.Xml.Linq.XElement) 

    Sub LoadXML() 
     mappingsEnum = XDocument.Load("mappings.xml").Root.Elements 

     'using collection view so I can apply 
     'filtering to the list of <mapping> objects 

     myCollectionView = CollectionViewSource.GetDefaultView(mappingsEnum) 

     myListBox.ItemsSource = myCollectionView  
End Sub 
.

en XAML

<Grid> 
    <ListBox x:Name="myListBox" ScrollViewer.VerticalScrollBarVisibility="Auto" DockPanel.Dock="Bottom" ScrollViewer.CanContentScroll="True" VirtualizingStackPanel.VirtualizationMode="Recycling" VirtualizingStackPanel.IsVirtualizing="True" SelectionMode="Extended"> 
     <ListBox.ItemTemplate> 
         <DataTemplate> 
          <Grid> 
           <!-- WHY DOESN'T THIS WORK?? -->  
           <TextBlock Text="{Binding [email protected]}"> 
          </Grid> 
         </DataTemplate> 
     </ListBox.ItemTemplate> 
</ListBox> 
</Grid> 

J'ai essayé de placer le XPath à "@ QID" aussi bien, qui a fait aucune différence. J'ai inspecté la collection myListBox.Items et j'ai confirmé que les objets sont en fait XElement objets qui ressemblent à <mapping QID="..."><empty/></mapping> donc je ne pense pas qu'il y ait un problème.

Le résultat final est un listBox qui se remplit avec des objets vides. Je peux les filtrer, les trier, et leur ajouter du texte non lié ... mais toute liaison à l'objet source est laissée non-créée.

Répondre

1

http://msdn.microsoft.com/en-us/library/system.windows.data.binding.xpath.aspx

Certains citation de là:

LINQ aux objets XML XDocument et XElement ne pas utiliser XPath. Pour plus de détails sur , voir Procédure: Lier à XDocument, XElement ou LINQ pour XML Résultats de la requête.

Et quelques exemples comment lier à XElement

http://msdn.microsoft.com/en-us/library/cc165615.aspx

+0

aaaaaaah. J'ai dû regarder cet article 3 fois et ne jamais lire tout le chemin vers le bas. Merci! –

+0

La solution finale ressemblait à ceci: