Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1909, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Come funziona la ObservableCollection(Of T) di WPF?

In molti esempi e in svariate circostanze, soprattutto con riguardo a post in questo blog ed articoli su Visual Basic Tips & Tricks, abbiamo utilizzato la ObservableCollection(Of T) per perfezionare il data-binding nelle applicazioni Windows Presentation Foundation, specificando che tale collezione è particolarmente indicata nel data-binding di tipo two-ways perché è in grado di notificare le modifiche che vengono eseguite nei confronti dei suoi elementi, grazie all’implementazione dell’interfaccia INotifyPropertyChanged.

 

In realtà, però, non abbiamo mai visto come questo effettivamente accada ed è proprio lo scopo di questo post. Per semplicità utilizzo un’applicazione per la Console con l’aggiunta di un riferimento all’assembly WindowsBase.dll che contiene la definizione della classe in questione.

 

La ObservableCollection tendenzialmente funziona come la List(Of T), quindi ha dei metodi Add, Remove e così via. Supponiamo di voler creare una collezione di stringhe, molto semplice:

 

        'Presuppone una direttiva Imports System.Collections.ObjectModel

        Dim stringCollection As New ObservableCollection(Of String)

 

La collezione espone un evento che si chiama CollectionChanged, che viene generato ogni qual volta gli elementi nella collezione subiscono modifiche. Se la collezione è istanziata a livello locale, dobbiamo esplicitare un gestore di evento nel modo seguente, per poter capire cosa accade:

 

        AddHandler stringCollection.CollectionChanged,

                   AddressOf stringCollectionChangedEventHandler

 

Quindi possiamo eseguire un po’ di operazioni di aggiunta e rimozione verso la collezione:

 

        stringCollection.Add("One string")

        stringCollection.Add("Two strings")

        stringCollection.Add("Three strings")

 

        stringCollection.Remove("Three strings")

 

 

Il gestore di evento rispetta la signature dello specifico delegate e il seguente è un esempio di implementazione:

 

    Private Sub stringCollectionChangedEventHandler(ByVal sender As Object,

                                                    ByVal e As Specialized.NotifyCollectionChangedEventArgs)

        Select Case e.Action

            Case Is = Specialized.NotifyCollectionChangedAction.Add

                Console.WriteLine("Added a new string")

            Case Is = Specialized.NotifyCollectionChangedAction.Remove

                Console.WriteLine("Removed a string")

        End Select

    End Sub

 

Il tipo System.Collections.Specialized.NotifyCollectionChangedEventArgs ci consente di conoscere quali modifiche sono intervenute sulla collection. Ad esempio, la proprietà Action ci permette di scoprire il tipo di azione (aggiunta, rimozione, sostituzione), mentre le proprietà NewItems e OldItems ci consentono rispettivamente di sapere quali elementi sono stati aggiunti e rimossi/sostituiti/spostati.

 

Grazie a questo tipo di impostazione, il data-binding two ways di WPF intercetta l’evento e comunica al runtime che l’interfaccia deve aggiornarsi in base alle modifiche.

 

Alessandro

Print | posted on martedì 1 settembre 2009 21:28 | Filed Under [ Visual Basic Windows Presentation Foundation ]

Powered by:
Powered By Subtext Powered By ASP.NET