Nouveautés de WPF version 4.5What's New in WPF Version 4.5

Cette rubrique contient des informations sur les fonctionnalités nouvelles et améliorées dans Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) version 4.5.This topic contains information about new and enhanced features in Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) version 4.5.

Cette rubrique contient les sections suivantes :This topic contains the following sections:

Contrôle de rubanRibbon control

WPF 4.5 est fourni avec un Ribbon contrôle qui héberge une barre d’outils Accès rapide, Menu de l’Application et des onglets.WPF 4.5 ships with a Ribbon control that hosts a Quick Access Toolbar, Application Menu, and tabs. Pour plus d’informations, consultez l’article Vue d’ensemble du ruban.For more information, see the Ribbon Overview.

Amélioration des performances lors de l’affichage de grands jeux de données groupéesImproved performance when displaying large sets of grouped data

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.UI virtualization occurs when a subset of user interface (UI) elements are generated from a larger number of data items based on which items are visible on the screen. Le VirtualizingPanel définit la IsVirtualizingWhenGrouping jointe de propriété qui permet la virtualisation de l’interface utilisateur pour les données groupées.The VirtualizingPanel defines the IsVirtualizingWhenGrouping attached property that enables UI Virtualization for grouped data. 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.For more information about grouping data, see How to: Sort and Group Data Using a View in XAML. Pour plus d’informations sur la virtualisation des données groupées, consultez le IsVirtualizingWhenGrouping propriété jointe.For more information about virtualizing grouped data, see the IsVirtualizingWhenGrouping attached property.

Nouvelles fonctionnalités destinées au VirtualizingPanelNew features for the VirtualizingPanel

  1. Vous pouvez spécifier si un VirtualizingPanel, telles que la VirtualizingStackPanel, affiche des éléments partiels à l’aide de la ScrollUnit propriété jointe.You can specify whether a VirtualizingPanel, such as the VirtualizingStackPanel, displays partial items by using the ScrollUnit attached property. Si ScrollUnit a la valeur Item, la VirtualizingPanel affiche uniquement les éléments qui sont complètement visibles.If ScrollUnit is set to Item, the VirtualizingPanel will only display items that are completely visible. Si ScrollUnit a la valeur Pixel, le VirtualizingPanel peut afficher des éléments partiellement visibles.If ScrollUnit is set to Pixel, the VirtualizingPanel can display partially visible items.

  2. Vous pouvez spécifier la taille du cache avant et après la fenêtre d’affichage lorsque la VirtualizingPanel virtualise à l’aide de la CacheLength propriété jointe.You can specify the size of the cache before and after the viewport when the VirtualizingPanel is virtualizing by using the CacheLength attached property. 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.The cache is the amount of space above or below the viewport in which items are not virtualized. 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.Using a cache to avoid generating UI elements as they’re scrolled into view can improve performance. 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.The cache is populated at a lower priority so that the application does not become unresponsive during the operation. Le VirtualizingPanel.CacheLengthUnit propriété détermine l’unité de mesure utilisée par VirtualizingPanel.CacheLength.The VirtualizingPanel.CacheLengthUnit property determines the unit of measurement that is used by VirtualizingPanel.CacheLength.

Liaison aux propriétés statiquesBinding to static properties

Vous pouvez utiliser des propriétés statiques comme source d’une liaison de données.You can use static properties as the source of a data binding. 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.The data binding engine recognizes when the property's value changes if a static event is raised. 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.For example, if the class SomeClass defines a static property called MyProperty, SomeClass can define a static event that is raised when the value of MyProperty changes. L’événement statique peut utiliser une des signatures suivantes.The static event can use either of the following signatures.

  • 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é PropertyName Changed qui passe EventArgs au gestionnaire d’événements.Note that in the first case, the class exposes a static event named PropertyNameChanged that passes EventArgs to the event handler. Dans le second cas, la classe expose un événement statique nommé StaticPropertyChanged qui passe PropertyChangedEventArgs au gestionnaire d’événements.In the second case, the class exposes a static event named StaticPropertyChanged that passes PropertyChangedEventArgs to the event handler. 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.A class that implements the static property can choose to raise property-change notifications using either method.

Accès aux collections sur les threads sans interface utilisateurAccessing collections on non-UI Threads

WPF permet d’accéder et de modifier des collections de données sur des threads autres que celui qui a créé la collection.WPF enables you to access and modify data collections on threads other than the one that created the 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.This enables you to use a background thread to receive data from an external source, such as a database, and display the data on the UI thread. En utilisant un autre thread pour modifier la collection, l’interface utilisateur reste réactive à une interaction utilisateur.By using another thread to modify the collection, your user interface remains responsive to user interaction.

Validation des données de façon synchrone et asynchroneSynchronously and Asynchronously validating data

Le INotifyDataErrorInfo interface permet des classes d’entité de données implémenter des règles de validation personnalisées et exposer des résultats de la validation de manière asynchrone.The INotifyDataErrorInfo interface enables data entity classes to implement custom validation rules and expose validation results asynchronously. 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é.This interface also supports custom error objects, multiple errors per property, cross-property errors, and entity-level errors. Pour plus d'informations, consultez INotifyDataErrorInfo.For more information, see INotifyDataErrorInfo.

Mise à jour automatique de la source d’une liaison de donnéesAutomatically updating the source of a data binding

Si vous utilisez une liaison de données pour mettre à jour une source de données, vous pouvez utiliser le Delay propriété pour spécifier un intervalle de temps à passer après les modifications des propriétés sur la cible avant les mises à jour de la source.If you use a data binding to update a data source, you can use the Delay property to specify an amount of time to pass after the property changes on the target before the source updates. Par exemple, supposons que vous ayez un Slider qui a son Value bidirectionnelle des données de propriété lié à une propriété d’un objet de données et la UpdateSourceTrigger est définie sur PropertyChanged.For example, suppose that you have a Slider that has its Value property data two-way bound to a property of a data object and the UpdateSourceTrigger property is set to PropertyChanged. Dans cet exemple, lorsque l’utilisateur déplace le Slider, les mises à jour de la source pour chaque pixel qui le Slider déplace.In this example, when the user moves the Slider, the source updates for each pixel that the Slider moves. L’objet source doit en général, la valeur du curseur uniquement lorsque le curseur du composant Value arrête la modification.The source object typically needs the value of the slider only when the slider's Value stops changing. Pour empêcher la mise à jour de la source de trop souvent, utilisez Delay pour spécifier que la source de ne doit pas être mis à jour jusqu'à ce qu’une certaine quantité de temps est écoulé après le curseur cesse de se déplacer.To prevent updating the source too often, use Delay to specify that the source should not be updated until a certain amount of time elapses after the thumb stops moving.

Liaison aux types qui implémentent ICustomTypeProviderBinding to types that Implement ICustomTypeProvider

WPF prend en charge la liaison de données aux objets qui implémentent ICustomTypeProvider, également appelées types personnalisés.WPF supports data binding to objects that implement ICustomTypeProvider, also known as custom types. Vous pouvez utiliser des types personnalisés dans les cas suivants.You can use custom types in the following cases.

  1. Comme un PropertyPath dans une liaison de données.As a PropertyPath in a data binding. Par exemple, le Path propriété d’un Binding peut faire référence à une propriété d’un type personnalisé.For example, the Path property of a Binding can reference a property of a custom type.

  2. En tant que la valeur de la DataType propriété.As the value of the DataType property.

  3. En tant que type qui détermine les colonnes générées automatiquement dans un DataGrid.As a type that determines the automatically generated columns in a DataGrid.

Récupération des informations de liaison de données à partir d’une expression de liaisonRetrieving data binding information from a binding expression

Dans certains cas, vous risquez d’obtenir le BindingExpression d’un Binding et avez besoin d’informations sur les objets source et cible de la liaison.In certain cases, you might get the BindingExpression of a Binding and need information about the source and target objects of the binding. De nouvelles API ont été ajoutées pour vous permettre d’obtenir l’objet source ou cible ou la propriété associée.New APIs have been added to enable you to get the source or target object or the associated property. Lorsque vous avez une BindingExpression, utiliser les API suivantes pour obtenir des informations sur la cible et source.When you have a BindingExpression, use the following APIs to get information about the target and source.

Pour trouver cette valeur de la liaisonTo find this value of the binding Utilisez cette APIUse this API
Objet cibleThe target object BindingExpressionBase.Target
Propriété cibleThe target property BindingExpressionBase.TargetProperty
Objet sourceThe source object BindingExpression.ResolvedSource
Propriété sourceThe source property BindingExpression.ResolvedSourcePropertyName
Si le BindingExpression appartient à un BindingGroupWhether the BindingExpression belongs to a BindingGroup BindingExpressionBase.BindingGroup
Le propriétaire d’un BindingGroupThe owner of a BindingGroup Owner

Vérification d’un objet DataContext valideChecking for a valid DataContext object

Il existe des cas où la DataContext d’un conteneur d’éléments dans un ItemsControl est déconnecté.There are cases where the DataContext of an item container in an ItemsControl becomes disconnected. Un conteneur d’élément est l’élément d’interface utilisateur qui affiche un élément dans un ItemsControl.An item container is the UI element that displays an item in an ItemsControl. Lorsqu’un ItemsControl données n’est lié à une collection, un conteneur d’élément est généré pour chaque élément.When an ItemsControl is data bound to a collection, an item container is generated for each item. Dans certains cas, les conteneurs d’éléments sont supprimés de l’arborescence d’éléments visuels.In some cases, item containers are removed from the visual tree. Sont de deux cas classiques où un conteneur d’élément est supprimé lorsqu’un élément est supprimé de la collection sous-jacente et lorsque la virtualisation est activée sur le ItemsControl.Two typical cases where an item container is removed are when an item is removed from the underlying collection and when virtualization is enabled on the ItemsControl. Dans ce cas, le DataContext propriété du conteneur d’élément est fixée à l’objet de sentinelle qui est retourné par la BindingOperations.DisconnectedSource propriété statique.In these cases, the DataContext property of the item container will be set to the sentinel object that is returned by the BindingOperations.DisconnectedSource static property. Vous devez vérifier si le DataContext est égal à la DisconnectedSource objet avant d’accéder à la DataContext d’un conteneur d’élément.You should check whether the DataContext is equal to the DisconnectedSource object before accessing the DataContext of an item container.

Repositionnement des données au fur et à mesure du changement des valeurs des données (mise en forme active)Repositioning data as the data's values change (Live shaping)

Une collection de données peut être regroupée, triée ou filtrée.A collection of data can be grouped, sorted, or filtered. WPF 4.5 permet la réorganisation des données lorsque les données sont modifiées.WPF 4.5 enables the data to be rearranged when the data is modified. Par exemple, supposons qu’une application utilise un DataGrid pour répertorier dans un marché boursier et des stocks sont triés par valeur de stock.For example, suppose that an application uses a DataGrid to list stocks in a stock market and the stocks are sorted by stock value. Si le tri dynamique est activé sur les stocks' CollectionView, position d’une action dans le DataGrid se déplace lorsque la valeur de l’action devient supérieure ou valeur du stock inférieur à un autre.If live sorting is enabled on the stocks' CollectionView, a stock's position in the DataGrid moves when the value of the stock becomes greater or less than another stock's value. Pour plus d’informations, consultez le ICollectionViewLiveShaping interface.For more information, see the ICollectionViewLiveShaping interface.

Amélioration de la prise en charge pour l’établissement d’une référence faible à un événementImproved Support for Establishing a Weak Reference to an Event

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.Implementing the weak event pattern is now easier because subscribers to events can participate in it without implementing an extra interface. Le type générique WeakEventManager classe permet également aux abonnés devant être inclus dans le modèle d’événement faible si dédiée WeakEventManager n’existe pas d’un événement particulier.The generic WeakEventManager class also enables subscribers to participate in the weak event pattern if a dedicated WeakEventManager does not exist for a certain event. Pour plus d’informations, consultez Modèles d’événement faible.For more information, see Weak Event Patterns.

Nouvelles méthodes pour la classe DispatcherNew methods for the Dispatcher class

La classe Dispatcher définit de nouvelles méthodes pour les opérations synchrones et asynchrones.The Dispatcher class defines new methods for synchronous and asynchronous operations. Synchrones Invoke méthode définit des surcharges qui prennent un Action ou Func<TResult> paramètre.The synchronous Invoke method defines overloads that take an Action or Func<TResult> parameter. La nouvelle méthode asynchrone, InvokeAsync, prend également un Action ou Func<TResult> comme paramètre de rappel et retourne un DispatcherOperation ou DispatcherOperation<TResult>.The new asynchronous method, InvokeAsync, also takes an Action or Func<TResult> as the callback parameter and returns a DispatcherOperation or DispatcherOperation<TResult>. Le DispatcherOperation et DispatcherOperation<TResult> classes définissent un Task propriété.The DispatcherOperation and DispatcherOperation<TResult> classes define a Task property. Lorsque vous appelez InvokeAsync, vous pouvez utiliser la await mot clé avec l’option le DispatcherOperation ou associé Task.When you call InvokeAsync, you can use the await keyword with either the DispatcherOperation or the associated Task. Si vous avez besoin d’attente de façon synchrone de la Task qui est retourné par une DispatcherOperation ou DispatcherOperation<TResult>, appelez le DispatcherOperationWait méthode d’extension.If you need to wait synchronously for the Task that is returned by a DispatcherOperation or DispatcherOperation<TResult>, call the DispatcherOperationWait extension method. Appel de Task.Wait entraîne un blocage si l’opération est en attente sur un thread d’appel.Calling Task.Wait will result in a deadlock if the operation is queued on a calling thread. Pour plus d’informations sur l’utilisation d’un Task pour effectuer des opérations asynchrones, consultez parallélisme des tâches (bibliothèque parallèle de tâches).For more information about using a Task to perform asynchronous operations, see Task Parallelism (Task Parallel Library).

Extensions de balisage pour les événementsMarkup Extensions for Events

WPF 4.5 prend en charge les extensions de balisage pour les événements.WPF 4.5 supports markup extensions for events. 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.While WPF does not define a markup extension to be used for events, third parties are able to create a markup extension that can be used with events.

Voir aussiSee Also

Nouveautés dans le .NET FrameworkWhat's New in the .NET Framework