Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
в этом разделе содержатся сведения о новых и расширенных функциях в Windows Presentation Foundation (WPF) версии 4.5.
Этот раздел состоит из следующих подразделов.
Улучшенная производительность при отображении больших наборов группированных данных
Новые возможности для VirtualizingPanel
Доступ к коллекциям в потоках, не относящихся к пользовательскому интерфейсу
Привязка к типам, которые реализуют ICustomTypeProvider
Извлечение информации о привязке данных из выражения привязки
Перестановка данных при изменении их значений (динамическое формирование)
расширения разметки для событий
Элемент управления "Лента"
WPF 4.5 поставляется с элементом управления Ribbon, на котором размещена панель быстрого доступа, меню приложения и вкладки. Для получения дополнительной информации см. обзор ленты .
Улучшенная производительность при отображении больших наборов сгруппированных данных
Виртуализация пользовательского интерфейса возникает, когда подмножество элементов пользовательского интерфейса создается из большего количества элементов данных на основе элементов, видимых на экране. В VirtualizingPanel определяется присоединенное свойство IsVirtualizingWhenGrouping, которое включает виртуализацию пользовательского интерфейса для группированных данных. Дополнительные сведения о группировке данных см. в статье "How to: Sort and Group Data Using a View in XAML". Дополнительные сведения о виртуализации сгруппированных данных см. в присоединённом свойстве IsVirtualizingWhenGrouping.
Новые возможности VirtualizingPanel
Можно указать, отображает ли VirtualizingPanel, например VirtualizingStackPanel, частичные элементы с помощью присоединенного свойства ScrollUnit. Если для ScrollUnit задано значение Item, VirtualizingPanel будет отображать только элементы, которые полностью видимы. Если ScrollUnit установлено в Pixel, VirtualizingPanel может отображать частично видимые элементы.
Размер кэша можно указать до и после окна просмотра при виртуализации VirtualizingPanel с помощью присоединенного свойства CacheLength. Кэш — это объем пространства выше или ниже окна просмотра, в котором элементы не виртуализированы. Использование кэша для избежания создания элементов интерфейса при прокрутке их на экран может повысить производительность. Кэш заполняется с низким приоритетом, чтобы приложение не становилось неотзывчивым во время операции. Свойство VirtualizingPanel.CacheLengthUnit определяет единицу измерения, которая используется VirtualizingPanel.CacheLength.
Привязка к статическим свойствам
Статические свойства можно использовать в качестве источника привязки данных. Подсистема привязки данных распознает, когда значение свойства изменяется, если возникает статическое событие. Например, если класс SomeClass
определяет статическое свойство MyProperty
, SomeClass
может определить статическое событие, которое возникает при изменении значения MyProperty
. Статическое событие может использовать любой из следующих подписей.
public static event EventHandler MyPropertyChanged;
public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;
Обратите внимание, что в первом случае класс предоставляет статическое событие с именем PropertyNameChanged
, которое передает EventArgs обработчику событий. Во втором случае класс предоставляет статическое событие с именем StaticPropertyChanged
, которое передает PropertyChangedEventArgs обработчику событий. Класс, реализующий статическое свойство, может создавать уведомления об изменении свойств с помощью любого метода.
Доступ к коллекциям в потоках, отличных от пользовательского интерфейса
WPF позволяет получать доступ к коллекциям данных и изменять их в потоках, отличных от созданной коллекции. Это позволяет использовать фоновый поток для получения данных из внешнего источника, например базы данных, и отображения данных в потоке пользовательского интерфейса. Используя другой поток для изменения коллекции, ваш пользовательский интерфейс остается отзывчивым к взаимодействию с пользователем.
Синхронная и асинхронная валидация данных
Интерфейс INotifyDataErrorInfo позволяет классам сущностей данных реализовывать пользовательские правила проверки и предоставлять результаты проверки асинхронно. Этот интерфейс также поддерживает пользовательские объекты ошибок, несколько ошибок на свойство, ошибок, связанных с несколькими свойствами, и ошибок уровня сущностей. Дополнительные сведения см. в разделе INotifyDataErrorInfo.
Автоматическое обновление источника привязки данных
Если для обновления источника данных используется привязка данных, можно использовать свойство Delay, чтобы указать время, которое необходимо пройти после внесения изменений свойств в целевом объекте до обновления источника. Например, предположим, что у вас есть Slider, у которого данные свойства Value связаны с свойством объекта данных на основе двухсторонней привязки, а для свойства UpdateSourceTrigger установлено значение PropertyChanged. В этом примере, когда пользователь перемещает Slider, источник обновляется на каждый пиксель движения Slider. Исходный объект обычно нуждается в значении ползунка только тогда, когда Value ползунка прекращает изменяться. Чтобы предотвратить обновление источника слишком часто, используйте Delay, чтобы указать, что источник не должен обновляться, пока не пройдет определенное время после того, как ползунок перестанет двигаться.
Привязка к типам, реализующим ICustomTypeProvider
WPF поддерживает привязку данных к объектам, реализующим ICustomTypeProvider, также известные как пользовательские типы. Вы можете использовать пользовательские типы в следующих случаях.
Как PropertyPath в привязке данных. Например, свойство Path в Binding может ссылаться на свойство пользовательского типа.
Значение свойства DataType.
Как тип, определяющий автоматически созданные столбцы в DataGrid.
Получение сведений о привязке данных из выражения привязки
В некоторых случаях вы можете получить BindingExpression из Binding и узнать сведения об исходных и целевых объектах привязки. Добавлены новые API, позволяющие получить исходный или целевой объект или связанное свойство. Если у вас есть BindingExpression, используйте следующие API для получения сведений о целевом объекте и источнике.
Чтобы найти это значение привязки | Использование этого API |
---|---|
Целевой объект | BindingExpressionBase.Target |
Целевое свойство | BindingExpressionBase.TargetProperty |
Исходный объект | BindingExpression.ResolvedSource |
Исходное свойство | BindingExpression.ResolvedSourcePropertyName |
Принадлежит ли BindingExpression к BindingGroup | BindingExpressionBase.BindingGroup |
Владелец BindingGroup | Owner |
Проверка допустимого объекта DataContext
Существуют случаи, когда DataContext контейнера элементов в ItemsControl становится отключенным. Контейнер элементов — это элемент пользовательского интерфейса, который отображает элемент в ItemsControl. Если ItemsControl привязан к коллекции данных, для каждого элемента создается контейнер. В некоторых случаях контейнеры элементов удаляются из визуального дерева. Два типичных случая, когда контейнер элементов удаляется: это, когда элемент удаляется из базовой коллекции, и когда виртуализация включена в ItemsControl. В этих случаях свойство DataContext контейнера элементов будет задано для объекта sentinel, возвращаемого статическим свойством BindingOperations.DisconnectedSource. Перед доступом к DataContext контейнера элементов необходимо проверить, является ли DisconnectedSource равным объекту DataContext.
Изменение положения данных по мере изменения значений данных (динамическое формирование)
Коллекция данных может быть сгруппирована, отсортирована или отфильтровано. WPF 4.5 позволяет перестраивать данные при их изменении. Например, предположим, что приложение использует DataGrid для перечисления акций на фондовом рынке и акции сортируются по стоимости акций. Если динамическая сортировка включена в CollectionViewакций, позиция акции в DataGrid перемещается, когда стоимость акции становится больше или меньше, чем стоимость другой акции. Дополнительные сведения см. в интерфейсе ICollectionViewLiveShaping.
Улучшена поддержка создания слабой ссылки на событие
Реализация слабого шаблона событий теперь проще, так как подписчики к событиям могут участвовать в нем без реализации дополнительного интерфейса. Универсальный класс WeakEventManager также позволяет подписчикам участвовать в слабом шаблоне событий, если выделенный WeakEventManager не существует для определенного события. Дополнительные сведения см. в шаблонах слабых событий.
Новые методы для класса Диспетчера
Класс Диспетчера определяет новые методы для синхронных и асинхронных операций. Синхронный метод Invoke определяет перегрузки, которые принимают параметр Action или Func<TResult>. Новый асинхронный метод InvokeAsyncтакже принимает Action или Func<TResult> в качестве параметра обратного вызова и возвращает DispatcherOperation или DispatcherOperation<TResult>. Классы DispatcherOperation и DispatcherOperation<TResult> определяют свойство Task. При вызове InvokeAsyncможно использовать ключевое слово await
как с DispatcherOperation, так и со связанным Task. Если необходимо синхронно ожидать Task, который возвращает DispatcherOperation или DispatcherOperation<TResult>, вызовите метод расширения DispatcherOperationWait. Вызов Task.Wait приведет к взаимоблокировке, если операция находится в очереди в вызывающем потоке. Дополнительные сведения об использовании Task для выполнения асинхронных операций см. в Параллелизм задач (Библиотека параллелизма задач).
Расширения разметки для событий
WPF 4.5 поддерживает расширения разметки для событий. Хотя WPF не определяет расширение разметки, используемое для событий, сторонние стороны могут создать расширение разметки, которое можно использовать с событиями.
См. также
.NET Desktop feedback