Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Novità di WPF versione 4.5

 

Data di pubblicazione: giugno 2016

Viene fornito WPF 4,5 con Ribbon verificare che ospita una barra di accesso rapido, un menu dell'applicazione e nelle schede.  Per ulteriori informazioni, vedere Cenni preliminari sulla barra multifunzione.  

La virtualizzazione di l si verifica quando un sottoinsieme degli elementi dell'interfaccia utente (UI) viene generato da un gran numero di elementi di dati basati su quali elementi sono visibili sullo schermo.   VirtualizingPanel definisce la proprietà associata IsVirtualizingWhenGrouping che consente la virtualizzazione dell'interfaccia utente per i dati raggruppati.  Per ulteriori informazioni sui dati di raggruppamento, vedere procedura: Ordinare e raggruppare i dati utilizzando una visualizzazione in XAML.  Per ulteriori informazioni sulla virtualizzazione dei dati raggruppati, vedere la proprietà associata IsVirtualizingWhenGrouping.  

  1. È possibile specificare se VirtualizingPanel, come VirtualizingStackPanel, visualizzare gli elementi parziali utilizzando la proprietà associata ScrollUnit.  Se ScrollUnit è impostato su Item, VirtualizingPanel visualizzati solo gli elementi che sono completamente visibili.  Se ScrollUnit è impostato su Pixel, VirtualizingPanel può visualizzare gli elementi visibili parzialmente.  

  2. È possibile specificare la dimensione della cache prima e dopo il riquadro di visualizzazione quando VirtualizingPanel sta utilizzando virtualizzando la proprietà associata CacheLength.  La cache è la quantità di spazio sopra o sotto il riquadro di visualizzazione in cui gli elementi non sono virtualizzate.  Utilizzo di una cache evitare di generare elementi di interfaccia utente quando vengono scorsi nella visualizzazione può migliorare le prestazioni.  La cache viene popolato con una priorità più bassa in modo che l'applicazione non diventa non rispondere durante l'operazione.  La proprietà VirtualizingPanel.CacheLengthUnit determina l'unità di misura utilizzata da VirtualizingPanel.CacheLength.  

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

  • public static event EventHandler MyPropertyChanged;

  • public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

Si noti che nel primo caso, la classe espone un evento statico denominato NomeproprietàChanged 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 possibile generare notifiche di variazione delle proprietà utilizzando qualsiasi metodo.  

WPF consente di visualizzare e modificare le raccolte di dati in thread diverso da quello che ha creato la raccolta.  Questo consente di utilizzare un thread in background per ricevere i dati da un'origine esterna, ad esempio un database e visualizzare i dati sul thread UI.  Utilizzando un altro thread per modificare la raccolta, l'interfaccia utente risponderà all'utente.  

L'interfaccia INotifyDataErrorInfo consente alle classi di entità di dati per implementare le regole di convalida personalizzate e per esporre i risultati di convalida in modo asincrono.  Questa interfaccia supporta inoltre gli oggetti di errore personalizzato, più errori per proprietà, errori di rapporti fra proprietà e degli errori livelli model.  Per ulteriori informazioni, vedere INotifyDataErrorInfo.  

Se si utilizza l'associazione dati per aggiornare un'origine dati, è possibile utilizzare la proprietà Delay per specificare un periodo della sessione dopo aver modificato la proprietà di destinazione prima degli aggiornamenti di origine.  Ad esempio, si supponga di avere Slider con limite bidirezionale di dati della proprietà Value a una proprietà di un oggetto dati e la proprietà UpdateSourceTrigger è impostata su PropertyChanged.  In questo esempio, quando l'utente sposta Slider, gli aggiornamenti del database di origine per ogni pixel che Slider sposta.  L'oggetto di origine in genere richiede il valore del dispositivo di scorrimento solo quando Value slider termine della modifica.  Per impedire aggiornare il database di origine troppo frequente, utilizzare Delay per specificare che l'origine non deve essere aggiornato finché una certa quantità di tempo non trascorra dopo che il cursore termine dello spostamento.  

WPF supporta l'associazione dati a oggetti che implementano ICustomTypeProvider, noti anche come tipi personalizzati.  È possibile utilizzare personalizzato nei casi seguenti.  

  1. Come PropertyPath nell'associazione dati.  Ad esempio, la proprietà PathBinding può fare riferimento alla proprietà di un tipo personalizzato.  

  2. Come valore della proprietà DataType.

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

In alcuni casi, è possibile ottenere BindingExpressionBinding ed essere necessarie informazioni sul database di origine e gli oggetti di destinazione di associazione.  I nuovi API sono stati aggiunti per consentire di ottenere l'origine o l'oggetto di destinazione o la proprietà associata.  Quando si BindingExpression, utilizzare i seguenti API per ottenere informazioni sull'origine e destinazione.  

Per trovare il valore dell'associazione

Utilizzare questa API

l'oggetto di destinazione

BindingExpressionBase.Target

La proprietà di destinazione

BindingExpressionBase.TargetProperty

l'oggetto di origine

BindingExpression.ResolvedSource

La proprietà di origine

BindingExpression.ResolvedSourcePropertyName

Se BindingExpression appartiene a BindingGroup

BindingExpressionBase.BindingGroup

Il proprietario BindingGroup

Owner

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

Una raccolta di dati può essere raggruppati, ordinato, o essere filtrata.  WPF 4,5 abilita i dati da ridisporre quando i dati vengono modificati.  Ad esempio, si supponga che un'applicazione può utilizzare DataGrid per elencare le azioni in un mercato azione e le azioni vengono ordinate in base al valore predefinito.  Se l'ordinamento attivo è abilitata in CollectionViewdi azione, la posizione delle azioni in DataGrid si sposta quando il valore delle azioni diventa maggiore o minore del valore di altre azioni.  Per ulteriori informazioni, vedere l'interfaccia ICollectionViewLiveShaping.  

Implementare il modello di evento debole è più semplice perché i sottoscrittori gli eventi possono partecipare senza implementare un'interfaccia aggiuntiva.  La classe generica WeakEventManager consente inoltre ai sottoscrittori di partecipare al modello di evento debole dedicato WeakEventManager se non esiste per un determinato evento.  Per ulteriori informazioni, vedere Modelli di eventi deboli.  

La classe del dispatcher definisce i nuovi metodi per sincrono e le operazioni asincrone.  Il metodo sincrono Invoke definisce gli overload che accettano un parametro Func<TResult> o Action.  Il nuovo metodo asincrono, InvokeAsync<TResult>, accetta Action o Func<TResult> come parametro di callback e restituisce DispatcherOperation o DispatcherOperation<TResult>.  Le classi DispatcherOperation<TResult> e DispatcherOperation definisce una proprietà Task.  Quando si chiama InvokeAsync, è possibile utilizzare la parola chiave await con DispatcherOperation o Taskcollegato.  Se è necessario attendere in modo sincrono Task restituito da DispatcherOperation o da DispatcherOperation<TResult>, chiamare il metodo di estensione DispatcherOperationWait.  Chiamare Task.Wait restituisce un deadlock se l'operazione è in coda in un thread chiamante.  Per ulteriori informazioni su l Task per eseguire operazioni asincrone, vedere Parallelismo fra attività (Task Parallel Library).  

Estensioni di markup supporti WPF 4,5 per gli eventi.  In WPF non definisce un'estensione di markup da utilizzare per gli eventi, le terze parti possono creare un'estensione di markup che può essere utilizzata con gli eventi.  

Mostra: