|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2007
Città: villa verucchio
Messaggi: 1921
|
[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 ?
__________________
CPU: Amd Phenom II 955--MB: Gigabyte GA-890GPA-UD3H--RAM:4 GB DDR3--SV: ATI Radeon HD 5770--HD: Western Digital Caviar Black 500 gb--ALI:: Corsair 650w--MONITOR: SyncMaster P2270--ROUTER: Netgear DG834G--SO: Win 7 Professional 64 bit |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Perche' non usi lo XAML?
In XAML dovrebbe essere qcs tipo Codice:
<ListBox x:Name="listBox1" ItemSource="{Binding elenco}" DisplayMemberPath = "titolo" SelectedItem="{Binding selezionato}"/> 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.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 03-02-2011 alle 12:44. |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jan 2007
Città: villa verucchio
Messaggi: 1921
|
Quote:
![]() 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.
__________________
CPU: Amd Phenom II 955--MB: Gigabyte GA-890GPA-UD3H--RAM:4 GB DDR3--SV: ATI Radeon HD 5770--HD: Western Digital Caviar Black 500 gb--ALI:: Corsair 650w--MONITOR: SyncMaster P2270--ROUTER: Netgear DG834G--SO: Win 7 Professional 64 bit |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:01.