Nello script #17 si è visto come rendere una classe utilizzabile nel Binding di WPF implementando l'interfaccia INotifyPropertyChanged.
In modo analogo può essere anche utile caricare collezione di dati attraverso controlli di elenco e si rende perciò necessario poter notificare questi controlli al variare degli elementi presenti nella collezione. Per farlo occorre implementare l'interfaccia System.Collections.Specialized.INotifyCollectionChanged, definita nell'assembly WindowsBase così definita:
public interface INotifyCollectionChanged { event NotifyCollectionChangedEventHandler CollectionChanged; }
Il singolo evento notifica tramite l'argomento NotifyCollectionChangedEventArgs gli items rimossi, quelli aggiunti e l'azione che li ha coinvolti. L'implementazione è specifica, ovviamente, della propria collezione, ma se si stanno sviluppando classi ad hoc per l'interfaccia WPF può venire utile l'utilizzo del tipo ObservableCollection<T> che eredita da Collection<T> e implementa già tale interfaccia, fornendo inoltre una tipizzazione degli elementi. Ponendo un'ipotetica classe MyEntity, ecco la semplice definizione della collezione:
using System.Collections.ObjectModel; public class MyEntityCollection : ObservableCollection<MyEntity> { }
Qualora si modifichi la collezione da thread diversi dal dispatcher, occorre prestare attenzione che le CollectionView generano un errore nel ricevere le notifiche. Bisogna quindi garantire la chiamata eventualmente sovrascrivendo i metodi OnPropertyChanged e OnCollectionChanged, invocandoli sempre sul Dispatcher.
Per approfondimenti sul caricamento delle liste si veda:
I controlli di elenco presenti in WPF
https://www.winfxitalia.com/articoli/presentation-foundation/controlli-elenco-WPF.aspx
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.