Novità di WPF versione 4.5

Questo argomento contiene informazioni sulle funzionalità nuove e avanzate in Windows Presentation Foundation (WPF) versione 4.5.

Questo argomento include le sezioni seguenti:

Controllo della barra multifunzione

WPF 4.5 viene fornito con un Ribbon controllo che ospita una barra di accesso rapido, un menu applicazione e schede. Per altre informazioni, vedere Cenni preliminari sulla barra multifunzione.

Miglioramento delle prestazioni durante la visualizzazione di grandi set di dati raggruppati

La virtualizzazione dell'interfaccia utente viene eseguita quando si genera un subset di elementi dell'interfaccia utente da un numero maggiore di elementi dati visibili sullo schermo. VirtualizingPanel Definisce la IsVirtualizingWhenGrouping proprietà associata che abilita la virtualizzazione dell'interfaccia utente per i dati raggruppati. Per ulteriori informazioni sul raggruppamento dei dati, vedere Procedura: ordinare e raggruppare i dati tramite una visualizzazione di XAML. Per altre informazioni sulla virtualizzazione dei dati raggruppati, vedere la IsVirtualizingWhenGrouping proprietà associata.

Nuove funzionalità per il VirtualizingPanel

  1. È possibile specificare se un VirtualizingPaneloggetto , ad esempio VirtualizingStackPanel, visualizza elementi parziali usando la ScrollUnit proprietà associata. Se ScrollUnit è impostato su Item, VirtualizingPanel verranno visualizzati solo gli elementi completamente visibili. Se ScrollUnit è impostato su Pixel, può VirtualizingPanel visualizzare elementi parzialmente visibili.

  2. È possibile specificare le dimensioni della cache prima e dopo il riquadro di visualizzazione durante la VirtualizingPanel virtualizzazione tramite la CacheLength proprietà associata. La cache è la quantità di spazio sopra o sotto il viewport in cui gli elementi non sono virtualizzati. È possibile migliorare le prestazioni usando una cache per evitare che vengano generati elementi dell'interfaccia utente quando ne viene eseguito lo scorrimento nella visualizzazione. La cache viene popolata con una priorità inferiore in modo che l'applicazione rimanga reattiva durante l'operazione. La VirtualizingPanel.CacheLengthUnit proprietà determina l'unità di misura utilizzata da VirtualizingPanel.CacheLength.

Associazione alle proprietà statiche

È possibile utilizzare proprietà statiche come origine di un data binding. Il motore di data binding riconosce quando cambia il valore della proprietà, se viene generato un evento statico. Ad esempio, se la classe SomeClass definisce una proprietà statica denominata MyProperty, SomeClass può definire un evento statico generato quando cambia il valore di MyProperty. L'evento statico può utilizzare una delle firme seguenti.

  • public static event EventHandler MyPropertyChanged;

  • public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

Si noti che nel primo caso, la classe espone un evento statico denominato PropertyNameChanged che passa EventArgs al gestore eventi. Nel secondo caso, la classe espone un evento statico denominato StaticPropertyChanged che passa PropertyChangedEventArgs al gestore eventi. Una classe che implementa la proprietà statica può scegliere di generare notifiche delle modifiche delle proprietà utilizzando uno dei metodi.

Accesso alle raccolte su thread non di interfaccia utente

WPF permette di accedere e modificare le raccolte di dati su thread diversi da quello che ha creato la raccolta. In questo modo è possibile utilizzare un thread in background per ricevere dati da un'origine esterna, ad esempio un database, e visualizzare i dati sul thread dell'interfaccia utente. Utilizzando un altro thread per modificare la raccolta, l'interfaccia utente rimane reattiva all'interazione dell'utente.

Convalida dei dati in modo sincrono e asincrono

L'interfaccia INotifyDataErrorInfo consente alle classi di entità dati di implementare regole di convalida personalizzate ed esporre i risultati della convalida in modo asincrono. Questa interfaccia supporta anche gli oggetti di errori personalizzati, più errori per ogni proprietà, gli errori tra le proprietà e gli errori a livello di entità. Per ulteriori informazioni, vedere INotifyDataErrorInfo.

Aggiornamento automatico dell'origine di un data binding

Se si usa un data binding per aggiornare un'origine dati, è possibile utilizzare la Delay proprietà per specificare una quantità di tempo da passare dopo la modifica della proprietà nella destinazione prima degli aggiornamenti dell'origine. Si supponga, ad esempio, di disporre di un Slider oggetto con i Value dati delle proprietà a due vie associati a una proprietà di un oggetto dati e che la UpdateSourceTrigger proprietà sia impostata PropertyChangedsu . In questo esempio, quando l'utente sposta , Sliderl'origine viene aggiornata per ogni pixel spostato.Slider L'oggetto di origine richiede in genere il valore del dispositivo di scorrimento solo quando il dispositivo di scorrimento smette di Value cambiare. Per impedire troppo spesso l'aggiornamento dell'origine, usare Delay per specificare che l'origine non deve essere aggiornata fino a quando non scade una determinata quantità di tempo dopo che il pollice smette di muoversi.

Associazione a tipi che implementano ICustomTypeProvider

WPF supporta il data binding a oggetti che implementano ICustomTypeProvider, noti anche come tipi personalizzati. È possibile utilizzare tipi personalizzati nei casi seguenti.

  1. Come in PropertyPath un data binding. Ad esempio, la Path proprietà di un Binding oggetto può fare riferimento a una proprietà di un tipo personalizzato.

  2. Come valore della DataType proprietà.

  3. Come tipo che determina le colonne generate automaticamente in un oggetto DataGrid.

Recupero delle informazioni di data binding da un'espressione di associazione

In alcuni casi, è possibile ottenere l'oggetto BindingExpression di e Binding richiedere informazioni sugli oggetti di origine e di destinazione dell'associazione. Sono state aggiunte nuove API che consentono di ottenere l'oggetto di origine e di destinazione o la proprietà associata. Quando si dispone di , BindingExpressionusare le API seguenti per ottenere informazioni sulla destinazione e sull'origine.

Per trovare questo valore dell'associazione Utilizzare questa API
L'oggetto di destinazione BindingExpressionBase.Target
La proprietà di destinazione BindingExpressionBase.TargetProperty
Oggetto di origine BindingExpression.ResolvedSource
La proprietà di origine BindingExpression.ResolvedSourcePropertyName
Indica se appartiene BindingExpression a un oggetto BindingGroup BindingExpressionBase.BindingGroup
Proprietario di un oggetto BindingGroup Owner

Verifica di un oggetto DataContext valido

In alcuni casi l'oggetto DataContext di un contenitore di elementi in un viene ItemsControl disconnesso. Un contenitore di elementi è l'elemento dell'interfaccia utente che visualizza un elemento in un oggetto ItemsControl. Quando un oggetto ItemsControl è associato a una raccolta, viene generato un contenitore di elementi per ogni elemento. In alcuni casi, i contenitori di elementi vengono rimossi dalla struttura ad albero visuale. Due casi tipici in cui viene rimosso un contenitore di elementi sono quando un elemento viene rimosso dalla raccolta sottostante e quando la virtualizzazione è abilitata in ItemsControl. In questi casi, la DataContext proprietà del contenitore di elementi verrà impostata sull'oggetto sentinel restituito dalla BindingOperations.DisconnectedSource proprietà statica. È necessario verificare se DataContext è uguale all'oggetto DisconnectedSource prima di accedere a DataContext di un contenitore di elementi.

Riposizionamento di dati contestuale alla modifica dei valori (shaping attivo)

Una raccolta di dati può essere raggruppata, ordinata o filtrata. WPF 4.5 consente di riordinare i dati quando questi vengono modificati. Si supponga, ad esempio, che un'applicazione usi un DataGrid oggetto per elencare le azioni in un mercato azionario e che le azioni siano ordinate in base al valore azionario. Se l'ordinamento in tempo reale è abilitato per le azioni' CollectionView, la posizione di un titolo si DataGrid sposta quando il valore del titolo diventa maggiore o minore del valore di un altro titolo. Per altre informazioni, vedere l'interfaccia ICollectionViewLiveShaping .

Supporto migliorato per stabilire un riferimento debole a un evento

L'implementazione del modello con riferimenti deboli agli eventi è ora più semplice perché i sottoscrittori di eventi possono parteciparvi senza implementare un'interfaccia aggiuntiva. La classe generica WeakEventManager consente inoltre ai sottoscrittori di partecipare al modello di evento debole se non esiste un evento dedicato WeakEventManager per un determinato evento. Per ulteriori informazioni, vedere Modelli di eventi deboli.

Nuovi metodi per la classe Dispatcher

La classe Dispatcher definisce nuovi metodi per le operazioni sincrone e asincrone. Il metodo sincrono Invoke definisce gli overload che accettano un Action parametro o Func<TResult> . Il nuovo metodo asincrono, InvokeAsync, accetta anche un Action oggetto o Func<TResult> come parametro di callback e restituisce un DispatcherOperation oggetto o DispatcherOperation<TResult>. Le DispatcherOperation classi e DispatcherOperation<TResult> definiscono una Task proprietà . Quando si chiama InvokeAsync, è possibile usare la await parola chiave con o con l'oggetto DispatcherOperation associato Task. Se è necessario attendere in modo sincrono per l'oggetto Task restituito da o DispatcherOperationDispatcherOperation<TResult>, chiamare il DispatcherOperationWait metodo di estensione. La chiamata Task.Wait genererà un deadlock se l'operazione è in coda su un thread chiamante. Per altre informazioni sull'uso di per Task eseguire operazioni asincrone, vedere Task Parallelism (Task Parallel Library).

Estensioni di markup per gli eventi

WPF 4.5 supporta le estensioni di markup per gli eventi. Mentre WPF non definisce un'estensione di markup da utilizzare per gli eventi, le terze parti sono in grado di creare un'estensione di markup che può essere utilizzata con gli eventi.

Vedi anche