2010-10-06 19 views
31

Sto tentando di imparare WPF svelando un progetto francamente da incubo scritto dal ragazzo che era in questo lavoro prima di me. Scusate se alcune delle mie domande sono praticamente a casa, ma sto cercando di capire cosa fa XAML esistente, con una comprensione insufficiente dei concetti alla base ...Che cosa significa "ItemsSource =" {Binding} ""?

In ogni caso, ho un ListView con questo come parte della sua definizione:

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

Ora, posso tipo di ottenere la mia testa intorno a ciò che il "DataContext" e "ItemContainerStyle" linee stanno facendo; sembrano fare riferimento a un metodo di ordinamento di un elenco esistente e una struttura che definisce rispettivamente un comportamento visivo di ListView.

Cosa mi sta distruggendo è il fatto che ItemsSource è elencato come "{Binding}". Tutto ciò che mi dice è che esiste una sorta di database, ma non capisco come la linea possa essere significativa e tuttavia rimuoverla impedisce la visualizzazione di qualsiasi dato.

Qualcuno può far luce su ciò che sta accadendo qui, o dove dovrei cercare la definizione di legame attuale? Io proprio non capisco quello che sto vedendo, qui.

risposta

30

Senza un percorso, {Binding} si collegherà allo stesso DataContext.
L'aggiunta di un percorso si associa a una proprietà del datacontext.

+0

Quindi "{Binding}" ricollega specificamente alla raccolta creata dalla proprietà DataContext di ListView? È qualcosa che generalmente accade per oggetti di tipo View o è specifico di ListView? Ci scusiamo per l'accattonaggio di ulteriori informazioni, ma sono sicuro che puoi apprezzare che la ricerca di "ItemsSource =" {Binding} "non è una ricerca abbastanza ristretta da farmi ottenere molti risultati, quindi la mia prima domanda è questa posto ... – Frosty840

+0

Non sono sicuro di cosa stai chiedendo. '{Binding}' può essere utilizzato in qualsiasi contesto in cui il valore che si desidera associare è 'DataContext' stesso. È più frequentemente utilizzato per associare un DataSource. – SLaks

+0

Ho pensato che fosse il caso, ma non potevo davvero esserne sicuro. Grazie per il chiarimento. – Frosty840

6

Questo esempio specifica che il binding è DataContext. La stessa cosa nel codice dietro sarebbe

MyList.ItemsSource = new Binding(); 

Si può anche fare cose come:

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

che si tradurrebbe a questo in codice dietro:

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

Speranza che aiuta

+1

Scusa, ho omesso di menzionare che quello su cui sto lavorando è (in teoria) un progetto MVVM, quindi non c'è alcun code-behind. Mentre sono sicuro che quello che dici sia corretto, non ho alcun contesto in cui interpretarlo. – Frosty840