View Full Version : [C#] Perplessità sul data binding
Ciao a tutti, sto facendo un piccolo progetto in WPF, ho una listbox la cui itemsource è associata a una lista di struct, la quale a sua volta è riempita da un file XML. Il valore della listbox cambia in base alla data selezionata dall'utente.
Ho notato che col seguente codice:
listBox1.ItemsSource = elenco;
listBox1.DisplayMemberPath = "titolo";
non aggiorna la listbox quando cambio data, mentre col seguente frammento:
listBox1.ItemsSource = null;
listBox1.ItemsSource = elenco;
listBox1.DisplayMemberPath = "titolo";
funziona perfettamente.
Col debug ho controllato e la lista "elenco" viene correttamente aggiornata, perchè è necessario porre a "null" l'itemSource ?
Perche' non usi lo XAML?
In XAML dovrebbe essere qcs tipo
<ListBox x:Name="listBox1" ItemSource="{Binding elenco}"
DisplayMemberPath = "titolo" SelectedItem="{Binding selezionato}"/>
elenco deve essere di tipo ObservableCollection se viene riempito dopo che la form effettua il binding (ovvero circa quando la form viene aperta)
Se invece venisse riempita prima, una qualsiasi IEnumerable dovrebbe andare bene.
Non ho capito cosa intendi per " non aggiorna la listbox quando cambio data"
che data?
Comunque il valore da prendersi sara' SelectedItem, ed e' bene effettuarne il binding da qualche parte
"selezionato" nell'esempio di cui sopra dovra' essere dello stesso tipo degli elementi di elenco.
Perche' non usi lo XAML?
In XAML dovrebbe essere qcs tipo
<ListBox x:Name="listBox1" ItemSource="{Binding elenco}"
DisplayMemberPath = "titolo" SelectedItem="{Binding selezionato}"/>
elenco deve essere di tipo ObservableCollection se viene riempito dopo che la form effettua il binding (ovvero circa quando la form viene aperta)
Se invece venisse riempita prima, una qualsiasi IEnumerable dovrebbe andare bene.
Non ho capito cosa intendi per " non aggiorna la listbox quando cambio data"
che data?
Comunque il valore da prendersi sara' SelectedItem, ed e' bene effettuarne il binding da qualche parte
"selezionato" nell'esempio di cui sopra dovra' essere dello stesso tipo degli elementi di elenco.
Scusa ho fatto un pò di confusione nel copia-incollare :muro:
Allora nel codice ho questo:
this.DataContext = null;
this.DataContext = elenco;
listBox1.DisplayMemberPath = "titolo";
mentre nel codice XAML in corrispondenza della listbox ho
listBox1.itemSource = {Binding} e poi IsSyncronizedWithCurrentItem a true perchè in base al valore scelto ho valori in altre textbox.
E appunto, senza mettere this.DataContext = null;, quando cambio la data selezionata in un datePicker non vengono aggiornati i dati della listbox. E non capisco perchè sinceramente.
In pratica uno sceglie la data, vengono aggiornati i valori della listbox e in base al valore scelto nella listbox variano altre due textbox.
PS. L'ho fatto da codice e non da XAML perchè non voglio che la cosa sia immediata all'apertura della form.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.