Creare collezioni utilizzabili con il Binding di WPF

di Cristian Civera, in Windows Presentation Foundation,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi