2010-10-06 6 views
31

Je tente d'apprendre WPF en démêlant un projet de cauchemar franchement écrit par le gars qui était dans ce travail avant moi. Désolé si certaines de mes questions sont à peu près au niveau des devoirs mais j'essaie de comprendre ce que fait XAML, avec une compréhension insuffisante des concepts qui le sous-tendent ...Que signifie 'ItemsSource = "{Binding}"'?

Quoi qu'il en soit, j'ai un ListView avec ceci comme une partie de sa définition:

<ListView 
    DataContext="{StaticResource XMLFileGroups}" 
    ItemContainerStyle="{StaticResource XMLItemStyle}" 
    ItemsSource="{Binding}"> 

maintenant, je peux genre d'obtenir ma tête autour de ce que les lignes « DataContext » et « ItemContainerStyle » font; ils semblent référencer une méthode de tri d'une liste existante, et une structure définissant un comportement visuel de ListView, respectivement. Ce qui me dégoûte est le fait que ItemsSource soit répertorié comme "{Binding}". Tout ce que je veux dire, c'est qu'il y a une sorte de liaison de données en place, mais je ne comprends pas comment la ligne peut avoir un sens et pourtant, le supprimer empêche l'affichage des données. Est-ce que quelqu'un peut faire la lumière sur ce qui se passe ici, ou sur ce que je devrais rechercher pour la définition de la liaison? Je ne comprends tout simplement pas ce que je vois, ici.

Répondre

30

Sans chemin, {Binding} se liera au DataContext lui-même.
L'ajout d'un chemin va lier à une propriété du datacontext.

+0

Donc, "{Binding}" renvoie spécifiquement à la collection créée par la propriété DataContext de ListView? Est-ce quelque chose qui arrive généralement pour les objets de type View ou est-il spécifique à ListView? Toutes mes excuses pour avoir demandé plus d'informations, mais je suis sûr que vous pouvez comprendre que la recherche de 'ItemsSource = "{Binding}"' n'est pas une recherche suffisamment étroite pour que j'obtienne beaucoup de résultats, d'où ma question dans la première lieu ... – Frosty840

+0

Je ne suis pas sûr de ce que vous demandez. '{Binding}' peut être utilisé dans n'importe quel contexte où la valeur que vous voulez lier est le 'DataContext' lui-même. Il est le plus souvent utilisé pour lier un DataSource. – SLaks

+0

Je pensais que c'était le cas, mais je ne pouvais pas être vraiment sûr. Merci pour la clarification. – Frosty840

6

Cet exemple spécifie que la liaison est le DataContext. La même chose dans le code serait derrière être

MyList.ItemsSource = new Binding(); 

Vous pouvez aussi faire des choses comme:

ItemsSource="{Binding YourBindingField, Source={StaticResource YourStaticDataSource}}" 

ce qui se traduirait dans votre code derrière:

 MyList.ItemsSource = new Binding() {ElementName = "YourBindingField", Source = YourStaticDataSource}; 

Espoir qui aide

+1

Désolé, j'ai omis de mentionner que ce sur quoi je travaille est (en théorie) un projet MVVM, donc il n'y a pas de code-behind. Même si je suis sûr que ce que vous dites est correct, je n'ai aucun contexte pour l'interpréter. – Frosty840