2010-10-06 8 views
31

Ich versuche WPF zu lernen, indem ich ein aufrichtig alptraumhaftes Projekt entwirre, das von dem Typen geschrieben wurde, der in diesem Job vor mir war. Entschuldigung, wenn einige meiner Fragen ziemlich Hausaufgaben-Ebene sind, aber ich versuche zu erarbeiten, was XAML vorhanden ist, mit einem unzureichenden Verständnis der Konzepte dahinter ...Was bedeutet ItemsSource = "{Binding}"?

Wie auch immer, ich habe ein ListView mit diesem als Teil seiner Definition:

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

Jetzt kann ich irgendwie bekommen, meinen Kopf um, was die „Datacontext“ und „ItemContainerStyle“ Linien tun; Sie verweisen auf eine Methode zum Sortieren einer vorhandenen Liste und auf eine Struktur, die ein bestimmtes visuelles Verhalten der ListView definiert.

Was mich ruiniert, ist die Tatsache, dass die ItemsSource als "{Binding}" aufgeführt ist. Alles, was mir sagt, ist, dass es irgendeine Art von Datenbindung gibt, aber ich verstehe nicht, wie die Zeile möglicherweise sinnvoll sein kann, und das Entfernen verhindert, dass Daten angezeigt werden.

Kann jemand etwas Licht auf das werfen, was hier passiert, oder wo ich nach der verbindlichen Definition suchen sollte? Ich verstehe einfach nicht, was ich hier sehe.

Antwort

30

Ohne Pfad wird {Binding} an die DataContext selbst binden.
Das Hinzufügen eines Pfads wird an eine Eigenschaft des Datenkontexts gebunden.

+0

Also "{Binding}" verweist speziell auf die Sammlung zurück, die von der DataContext-Eigenschaft der ListView erstellt wird? Ist das etwas, das im Allgemeinen für Objekte vom Typ View oder für ListView spezifisch ist? Ich entschuldige mich dafür, dass ich um mehr Informationen bettle, aber ich bin mir sicher, dass Sie wissen, dass die Suche nach 'ItemsSource = "{Binding}' nicht eng genug ist, um viele Ergebnisse zu erhalten. Daher stelle ich diese Frage in der ersten Frage Platz ... – Frosty840

+0

Ich bin mir nicht sicher, was Sie fragen. '{Binding}' kann in jedem Kontext verwendet werden, in dem der Wert, an den Sie binden möchten, der 'DataContext' selbst ist. Es wird am häufigsten zum Binden einer DataSource verwendet. – SLaks

+0

Ich dachte, das wäre der Fall, aber ich konnte mir nicht wirklich sicher sein. Danke für die Klarstellung. – Frosty840

6

Dieses Beispiel gibt an, dass die Bindung der DataContext ist. Dasselbe in der Code-behind wäre

MyList.ItemsSource = new Binding(); 

Sie auch Sachen tun können, wie:

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

, die hinter diesem in Code übersetzen würde:

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

Hoffnung, die

hilft
+1

Entschuldigung, ich habe versäumt zu erwähnen, dass das, woran ich arbeite, (in der Theorie) ein MVVM-Projekt ist, also gibt es keinen Code-Behind. Obwohl ich sicher bin, dass das, was du sagst, korrekt ist, habe ich keinen Kontext, um es zu interpretieren. – Frosty840