Architettura Model-View-ViewModel in un'applicazione WPF

7 pagine in totale: <<Indietro 1 2 3 4 5 [6] 7 Avanti >>

Gestione delle viste sui dati

La proprietà Threads presa in esame fino a questo momento, essendo una lista, può essere caricata attraverso i controlli di lista presenti in WPF, come ListBox, ComboBox, ListView ecc. Quando questo avviene, il motore di Binding crea una vista che fa da tramite tra il controllo e la sorgente dati. Il metodo statico CollectionViewSource.GetDefaultView permette di ottenere questa vista che implementa l'interfaccia ICollectionView. Tramite essa, e se supportata dalla collezione sorgente, è possibile controllare tutti gli aspetti di navigazione e gestione dei dati, quali l'elemento selezionato, la posizione, il filtro, il raggruppamento e l'ordinamento. Alcuni controlli agiscono su queste informazioni e cambiano di conseguenza, perciò ottenendo la stessa interfaccia all'interno del ViewModel è possibile intercettare i cambiamenti di stato, oppure agire e cambiare le informazioni.

Per esempio, se si volesse selezionare automaticamente il primo thread appena terminato il caricamento della lista, si può raggiungere questo scopo attraverso il precedente metodo OnRefreshAsyncCompleted:

private void OnRefreshAsyncCompleted(object arg) 
{ 
  ... 
 
  ICollectionView view = CollectionViewSource.GetDefaultView(this.Threads); 
  view.MoveCurrentToFirst(); 
}

In questo modo la lista dei thread può essere caricata nei modi più disparati nel markup XAML e lo sviluppatore può controllare gli aspetti della vista ignorando tutto l'aspetto grafico e, anche in questo caso, permettendo il testing dell'applicazione.

Di seguito la definizione dell'interfaccia ICollectionView, i cui membri sono auto descrittivi:

public interface ICollectionView : IEnumerable, INotifyCollectionChanged 
{ 
  // Eventi 
  event EventHandler CurrentChanged; 
  event CurrentChangingEventHandler CurrentChanging; 
 
  // Metodi 
  bool Contains(object item); 
  IDisposable DeferRefresh(); 
  bool MoveCurrentTo(object item); 
  bool MoveCurrentToFirst(); 
  bool MoveCurrentToLast(); 
  bool MoveCurrentToNext(); 
  bool MoveCurrentToPosition(int position); 
  bool MoveCurrentToPrevious(); 
  void Refresh(); 
 
  // Proprietà 
  bool CanFilter { get; } 
  bool CanGroup { get; } 
  bool CanSort { get; } 
  CultureInfo Culture { get; set; } 
  object CurrentItem { get; } 
  int CurrentPosition { get; } 
  Predicate<object> Filter { get; set; } 
  ObservableCollection<GroupDescription> GroupDescriptions { get; } 
  ReadOnlyObservableCollection<object> Groups { get; } 
  bool IsCurrentAfterLast { get; } 
  bool IsCurrentBeforeFirst { get; } 
  bool IsEmpty { get; } 
  SortDescriptionCollection SortDescriptions { get; } 
  IEnumerable SourceCollection { get; } 
}

Dal service pack del .NET Framework 3.5 è inoltre disponibile l'interfaccia IEditableCollectionView che alcune viste possono implementare e controlli come il DataGrid possono sfruttare. Questa nuova interfaccia permette di controllare anche gli aspetti di modifica di una sorgente dati, come aggiungere e togliere elementi, e gestire la transazionalità della modifica.

7 pagine in totale: <<Indietro 1 2 3 4 5 [6] 7 Avanti >>

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti

Per inserire un commento, devi avere un account.

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



Segnala su: Facebook MSDN Social Twitter Segnalo Wikio Diggita Technorati Stumbleupon Google Yahoo FriendFeed Delicious Furl

IL CONTENUTO
TUTORIALS
TOP TEN ARTICOLI
ARTICOLI VIA E-EMAIL

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

MEDIA
IN EVIDENZA
MISC