Nouveautés de WPF version 4.5

Cette rubrique contient des informations sur les fonctionnalités nouvelles et améliorées de Windows Presentation Foundation (WPF) version 4.5.

Cette rubrique contient les sections suivantes :

Contrôle de ruban

WPF 4.5 est fourni avec un contrôle qui héberge une Ribbon barre d’outils Accès rapide, un menu d’application et des onglets. Pour plus d’informations, consultez l’article Vue d’ensemble du ruban.

Amélioration des performances lors de l’affichage de grands jeux de données groupées

La virtualisation de l’interface utilisateur survient lorsqu’un sous-ensemble d’éléments d’interface utilisateur sont générés à partir d’un plus grand nombre d’éléments de données, selon les éléments visibles à l’écran. Définit VirtualizingPanel la propriété jointe qui active la virtualisation de l’interface IsVirtualizingWhenGrouping utilisateur pour les données groupées. Pour plus d’informations sur le regroupement de données, consultez Comment : trier et grouper des données à l’aide d’une vue en XAML. Pour plus d’informations sur la virtualisation des données groupées, consultez la IsVirtualizingWhenGrouping propriété jointe.

Nouvelles fonctionnalités destinées au VirtualizingPanel

  1. Vous pouvez spécifier si un VirtualizingPanel, tel que le VirtualizingStackPanel, affiche des éléments partiels à l’aide de la ScrollUnit propriété jointe. S’il ScrollUnit est défini sur Item, le VirtualizingPanel seul élément affiche les éléments qui sont complètement visibles. Si ScrollUnit la valeur est définie Pixel, l’élément VirtualizingPanel peut afficher des éléments partiellement visibles.

  2. Vous pouvez spécifier la taille du cache avant et après la fenêtre d’affichage lors VirtualizingPanel de la virtualisation à l’aide de la CacheLength propriété jointe. Le cache est la quantité d’espace au-dessus ou au-dessous de la fenêtre d’affichage dans laquelle les éléments ne sont pas virtualisés. L’utilisation d’un cache pour éviter de générer des éléments d’interface utilisateur à mesure qu’ils défilent peut améliorer les performances. Le cache est alimenté à un niveau de priorité inférieure afin que l’application ne cesse pas de répondre lors de l’opération. La VirtualizingPanel.CacheLengthUnit propriété détermine l’unité de mesure utilisée par VirtualizingPanel.CacheLength.

Liaison aux propriétés statiques

Vous pouvez utiliser des propriétés statiques comme source d’une liaison de données. Le moteur de liaison de données reconnaît le changement de valeur d’une propriété lors du déclenchement d’un événement statique. Par exemple, si la classe SomeClass définit une propriété statique appelée MyProperty, SomeClass peut définir un événement statique déclenché lorsque la valeur de MyProperty varie. L’événement statique peut utiliser une des signatures suivantes.

  • public static event EventHandler MyPropertyChanged;

  • public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

Notez que dans le premier cas, la classe expose un événement statique nommé PropertyNameChanged qui passe EventArgs au gestionnaire d’événements. Dans le deuxième cas, la classe expose un événement statique nommé StaticPropertyChanged qui passe PropertyChangedEventArgs au gestionnaire d’événements. Une classe qui implémente la propriété statique peut choisir de déclencher des notifications de modification de propriété à l’aide d’une des deux méthodes.

Accès aux collections sur les threads sans interface utilisateur

WPF permet d’accéder et de modifier des collections de données sur des threads autres que celui qui a créé la collection. Cela permet d’utiliser un thread d’arrière-plan pour recevoir des données provenant d’une source externe, comme une base de données et afficher les données sur le thread d’interface utilisateur. En utilisant un autre thread pour modifier la collection, l’interface utilisateur reste réactive à une interaction utilisateur.

Validation des données de façon synchrone et asynchrone

L’interface INotifyDataErrorInfo permet aux classes d’entités de données d’implémenter des règles de validation personnalisées et d’exposer les résultats de validation de manière asynchrone. Cette interface prend également en charge les objets d’erreur personnalisés, plusieurs erreurs par propriété, les erreurs d’inter-propriétés et les erreurs au niveau de l’entité. Pour plus d’informations, consultez INotifyDataErrorInfo.

Mise à jour automatique de la source d’une liaison de données

Si vous utilisez une liaison de données pour mettre à jour une source de données, vous pouvez utiliser la Delay propriété pour spécifier une durée de transmission après la modification de la propriété sur la cible avant la mise à jour de la source. Par exemple, supposons que vous disposez d’une Slider propriété dont les Value données de propriété sont liées de deux manières à une propriété d’un objet de données et que la UpdateSourceTrigger propriété est définie PropertyChangedsur . Dans cet exemple, lorsque l’utilisateur déplace le Slider, la source est mise à jour pour chaque pixel déplacé Slider . L’objet source a généralement besoin de la valeur du curseur uniquement lorsque le curseur cesse de Value changer. Pour empêcher la mise à jour de la source trop souvent, utilisez Delay pour spécifier que la source ne doit pas être mise à jour tant qu’un certain temps s’écoule après que le pouce cesse de se déplacer.

Liaison aux types qui implémentent ICustomTypeProvider

WPF prend en charge la liaison de données aux objets qui implémentent ICustomTypeProvider, également appelés types personnalisés. Vous pouvez utiliser des types personnalisés dans les cas suivants.

  1. PropertyPath En tant que liaison de données. Par exemple, la Path propriété d’un Binding peut référencer une propriété d’un type personnalisé.

  2. Valeur de la DataType propriété.

  3. En tant que type qui détermine les colonnes générées automatiquement dans un DataGrid.

Récupération des informations de liaison de données à partir d’une expression de liaison

Dans certains cas, vous pouvez obtenir des informations sur les BindingExpressionBinding objets source et cible de la liaison. De nouvelles API ont été ajoutées pour vous permettre d’obtenir l’objet source ou cible ou la propriété associée. Lorsque vous disposez d’un BindingExpression, utilisez les API suivantes pour obtenir des informations sur la cible et la source.

Pour trouver cette valeur de la liaison Utilisez cette API
Objet cible BindingExpressionBase.Target
Propriété cible BindingExpressionBase.TargetProperty
Objet source BindingExpression.ResolvedSource
Propriété source BindingExpression.ResolvedSourcePropertyName
Indique si le membre BindingExpression appartient à un BindingGroup BindingExpressionBase.BindingGroup
Propriétaire d’un BindingGroup Owner

Vérification d’un objet DataContext valide

Il existe des cas où le DataContext conteneur d’un élément dans un ItemsControl conteneur devient déconnecté. Un conteneur d’éléments est l’élément d’interface utilisateur qui affiche un élément dans un ItemsControl. Lorsqu’une ItemsControl donnée est liée à une collection, un conteneur d’éléments est généré pour chaque élément. Dans certains cas, les conteneurs d’éléments sont supprimés de l’arborescence d’éléments visuels. Deux cas typiques où un conteneur d’éléments est supprimé sont lorsqu’un élément est supprimé de la collection sous-jacente et lorsque la virtualisation est activée sur le ItemsControl. Dans ces cas, la DataContext propriété du conteneur d’éléments est définie sur l’objet sentinel retourné par la BindingOperations.DisconnectedSource propriété statique. Vous devez case activée si l’objet DataContext est égal à l’objet DisconnectedSource avant d’accéder au DataContext conteneur d’éléments.

Repositionnement des données au fur et à mesure du changement des valeurs des données (mise en forme active)

Une collection de données peut être regroupée, triée ou filtrée. WPF 4.5 permet la réorganisation des données lorsque les données sont modifiées. Par exemple, supposons qu’une application utilise une DataGrid application pour répertorier les actions d’un marché boursier et que les actions sont triées par valeur boursière. Si le tri en direct est activé sur les actions, CollectionViewla position d’un stock dans les DataGrid déplacements lorsque la valeur du stock devient supérieure ou inférieure à la valeur d’un autre stock. Pour plus d’informations, consultez l’interface ICollectionViewLiveShaping .

Amélioration de la prise en charge pour l’établissement d’une référence faible à un événement

L’implémentation du modèle d’événement faible est désormais plus facile car les abonnés aux événements peuvent y participer sans avoir à implémenter d’interface supplémentaire. La classe générique WeakEventManager permet également aux abonnés de participer au modèle d’événement faible si un événement dédié WeakEventManager n’existe pas pour un certain événement. Pour plus d’informations, consultez Modèles d’événement faible.

Nouvelles méthodes pour la classe Dispatcher

La classe Dispatcher définit de nouvelles méthodes pour les opérations synchrones et asynchrones. La méthode synchrone Invoke définit des surcharges qui prennent un ou Func<TResult> un Action paramètre. La nouvelle méthode asynchrone, InvokeAsyncprend également un Action ou Func<TResult> en tant que paramètre de rappel et retourne un DispatcherOperation ou DispatcherOperation<TResult>. Les DispatcherOperation classes et DispatcherOperation<TResult> les classes définissent une Task propriété. Lorsque vous appelezInvokeAsync, vous pouvez utiliser l’mot clé await avec l’un DispatcherOperation ou l’autre Taskassocié. Si vous avez besoin d’attendre de façon synchrone pour l’élément Task retourné par un DispatcherOperation ou DispatcherOperation<TResult>, appelez la DispatcherOperationWait méthode d’extension. L’appel Task.Wait entraîne un blocage si l’opération est mise en file d’attente sur un thread appelant. Pour plus d’informations sur l’utilisation d’une Task opération asynchrone, consultez Le parallélisme des tâches (bibliothèque parallèle de tâches).

Extensions de balisage pour les événements

WPF 4.5 prend en charge les extensions de balisage pour les événements. Bien que WPF ne définisse pas d’extension de balisage à utiliser pour les événements, des tiers sont en mesure de créer une extension de balisage qui peut être utilisée avec les événements.

Voir aussi