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.
Approfondimenti
Change tracking e composition in Entity Framework
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi