Новые возможности WPF версии 4.5
Этот раздел содержит сведения о новых и усовершенствованных возможностях Windows Presentation Foundation (WPF) версии 4.5.
В этом разделе содержатся следующие подразделы.
Повышение производительности при отображении больших наборов сгруппированных данных
Доступ к коллекциям в потоках без пользовательского интерфейса
Изменение расположения данных по мере изменения их значений (формирование данных в реальном времени)
Элемент управления ленты
WPF 4.5 поставляется с Ribbon элемента управления, в которой размещаются панель быстрого доступа, меню приложения и вкладки. Дополнительные сведения см. в разделе Общие сведения об ленте.
Повышение производительности при отображении больших наборов сгруппированных данных
Когда подмножество элементов пользовательского интерфейса создается из большего количества элементов данных в зависимости от того, какие из элементов отображаются на экране, происходит виртуализация пользовательского интерфейса. VirtualizingPanel Определяет IsVirtualizingWhenGrouping присоединенное свойство, обеспечивающее виртуализацию пользовательского интерфейса для сгруппированных данных. Дополнительные сведения о группировании данных см. в разделе как: Сортировка и группировка данных с помощью представления в 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;
Обратите внимание, что в первом случае класс предоставляет статическое событие с именем PropertyName Changed
, прошедший 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 контейнера элементов будет установлено сигнальный объект, возвращаемый BindingOperations.DisconnectedSource статическое свойство. Стоит ли DataContext равен DisconnectedSource объект перед доступом к DataContext контейнера элемента.
Изменение расположения данных по мере изменения их значений (формирование данных в реальном времени)
Коллекцию данных можно группировать, сортировать и фильтровать. WPF 4.5 позволяет изменять порядок данных при их изменении. Например, предположим, что приложение использует DataGrid Чтобы получить список акций на фондовой биржи и акции сортируются по стоимости акции. Если сортировка в реальном времени с включенной акции CollectionView, положение акции в DataGrid перемещения, когда значение акции становится больше или меньше, чем других акций. Дополнительные сведения см. в разделе ICollectionViewLiveShaping интерфейс.
Улучшенная поддержка установления слабой ссылки на событие
Реализация шаблона слабых событий стала проще, поскольку подписчики на события теперь могут принимать в ней участие без реализации дополнительного интерфейса. Универсальный WeakEventManager класс также позволяет подписчикам участвовать в шаблоне слабых событий, если выделенный WeakEventManager для определенного события не существует. Дополнительные сведения см. в разделе Шаблоны слабых событий.
Новые методы для класса Dispatcher
Класс Dispatcher определяет новые методы для синхронных и асинхронных операций. Синхронный Invoke метод определяет перегрузки, принимающие Action или Func<TResult> параметра. Новый асинхронный метод InvokeAsync, также принимает Action или Func<TResult> как параметр обратного вызова и она возвращает DispatcherOperation или DispatcherOperation<TResult>. DispatcherOperation И DispatcherOperation<TResult> классы определяют Task свойство. При вызове InvokeAsync, можно использовать await
ключевого слова with либо DispatcherOperation или связанного Task. Если требуется синхронно дождаться Task , возвращаемый DispatcherOperation или DispatcherOperation<TResult>, вызовите DispatcherOperationWait метода расширения. Вызов Task.Wait будет привести к взаимоблокировке, если операция помещается в очередь в вызывающий поток. Дополнительные сведения об использовании Task для выполнения асинхронных операций, см. в разделе параллелизм задач (библиотека параллельных задач).
Расширения разметки для событий
WPF 4.5 поддерживает расширения разметки для событий. Несмотря на то, что WPF не определяет расширение разметки для применения с событиями, третьи стороны могут создавать расширение разметки, которое можно использовать с событиями.