Domanda

Ho un'istanza di ObservableCollection associata a una casella di riepilogo WPF con due modelli di dati separati (uno per la visualizzazione, uno per la modifica). Il modello di dati per la modifica ha un'associazione unidirezionale nella casella di testo e un pulsante Salva.

Quali modifiche devo apportare in modo tale che quando premo il pulsante Salva (dopo aver messo la voce di elenco in modalità modifica), il valore cambio la casella di testo per sostituire il valore in ObservableCollection (e il display)?

È stato utile?

Soluzione

Gli elementi nella tua raccolta dovrebbero essere del tipo che implementa l'interfaccia INotifyPropertyChanged. In questo modo la casella di riepilogo verrà avvisata che il valore della proprietà nell'oggetto singolo elemento è stato modificato. ObservableCollection genera l'evento CollectionChanged solo quando cambia la raccolta (elementi aggiunti, rimossi, ecc.)

Citazione dall'articolo della libreria MSDN su ObservableCollection

  

Per supportare completamente il trasferimento di dati   valori da oggetti sorgente vincolanti a   obiettivi vincolanti, ogni oggetto nel tuo   raccolta che supporta associabile   le proprietà devono implementare un   proprietà appropriata modificata   meccanismo di notifica come il   Interfaccia INotifyPropertyChanged.

Altri suggerimenti

Affinché la notifica di modifica avvenga in un'associazione tra un client associato e un'origine dati, il tipo associato deve:

  • Implementa INotifyPropertyChanged interfaccia (preferita).
  • Fornisci un evento di modifica per ciascuno proprietà del tipo associato.

Non fare entrambe le cose.

Fonte: MSDN: INotifyPropertyChanged Interface

Ho risolto un problema simile usando BindingList < T > Classe.

L'evento ListChanged è stato attivato sia sulla raccolta che sulla modifica di singoli articoli.

Introdotto in .Net 3.5

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top