Главная » WPF » Принципы работы с данными WPF

0

Как правило,  приложение создается  для отображения или создания  тех или иных данных. Что бы ни представляли собой данные – документ, базу данных или чертеж, главная задача приложения состоит в том, чтобы их отобразить, создать и отредактировать. Способов представления данных столько же, сколь ко приложений. Уже с момента возникновения на платформе .NET существова ла стандартная модель, которая существенно изменила подходы к обработке данных.

Модель данных в .NET

Модель данных описывает  контракт  между источником и потребителем  дан ных. Исторически сложилось  так, что каждый  каркас  нес с собой новую модель данных: В Visual Basic это сначала была DAO (Data Access Objects), потом RDO (Remote Data  Objects) и, наконец,  ADO  (ActiveX  Data  Objects). На платформе

.NET произошел  переход от API зависимых моделей к единой для всего каркаса.

В .NET имеется  некая  объектная  модель, содержащаяся классы,  интерфей сы, структуры, перечисления, делегаты и т.д. Но сверх того включена очень простая модель данных. Списки в .NET представляются интерфейсами из пространства имен System.Collections: IEnumerable и IList. Свойства  определя ются либо с с помощью встроенных  в CLR свойств, либо путем реализации ин терфейса ICustomTypeDescriptor. Эта базовая модель осталась неизменной, несмотря  на появление новых технологий  доступа к данным, и даже пережила существенные изменения в самом языке, например, появление языково незави

симых  запросов,  включение  которых  в следующую  версию  .NET  находится  в стадии обсуждения.

В .NET  также  имеется  и несколько  конкретных способов  работы  с данными,

например: ADO.NET (пространство имен System.Data), XML (пространство имен System.Xml),  контракт  о данных (пространство имен System.Runtime.Serialization) и разметка (пространство имен System.Windows.Markup). И это далеко не все. Са мое важное, что все они построены поверх базовой модели данных .NET.

Поскольку все операции  с данными  в WPF базируются  на фундаменте моде ли данных .NET, то элементы  управления WPF могут получать данные от любо го объекта CLR:

ListBox listBox1 = new ListBox();

listBox1.ItemsSource = new string[] { «Hello», «World» };

Намита  Гупта (Namita  Gupta), менеджер  команды WPF,  замечательно  выра зился  по поводу этой функциональности: «Ваши данные, что хотите, то и делай те». Коль скоро к данным можно получить  доступ с помощью CLR, их можно и визуализировать в WPF.

Всепроникающее связывание

Из всех нововведений, появившихся в WPF,  для программиста, пожалуй,  са мым важным является полная  интеграция связывания в систему. Шаблоны  эле ментов, ресурсы и даже базовая  «модель содержимого»,  лежащая  в основе таких элементов  управления, как Button и ListBox, – все может быть привязано к дан ным. Идея привязки свойств к источникам данным, отслеживания зависимостей и автоматического обновления экрана пронизывает все части WPF.

У связывания в WPF много названий.  Обычно мы выбирали  новое имя, ес ли у некоей  разновидности связывания имелось  ограничение  или  поведение, специфичное лишь для конкретного сценария. Например, для привязки к шаб лонам в разметке  применяется обозначение  {TemplateBinding}  вместо станда ртной  нотации  {Binding}, используемой для  привязки к данным.  Привязка к шаблону работает лишь в контексте  некоего шаблона, и при этом допускается привязывать лишь свойства  шаблонного  элемента  управления. Это ограниче ние обеспечивает  очень высокую эффективность привязки, что абсолютно не обходимо, так как в WPF очень многие элементы  управления привязываются к шаблонам.

Привязка позволяет  синхронизировать два  представления данных.  В WPF это означает, что некие данные (то есть свойство источника  данных)  привязыва ются  к свойству  элемента  пользовательского интерфейса. Привязка прекрасно годится для поддержания синхронизации между двумя объектами, но, если типы данных этих объектов согласуются  не идеально,  начинают  возникать  проблемы. Чтобы идея привязки действительно проникла  во все части каркаса, было необ ходимо предложить способы преобразования данных.

Преобразование данных

В любом каркасе с повсеместной  привязкой доступ к произвольным данным возможен  лишь тогда, когда эти данные могут быть преобразованы в любом мес те, где привязка поддерживается1.

WPF поддерживает два основных  вида преобразований: конвертацию значе ний и шаблоны  данных. Конвертеры значений  просто преобразовывают данные из одного формата в другой (например, строку «Red» в Brushes.Red). Это весьма мощный механизм, поскольку  конвертер  может осуществлять двустороннее  пре образование. Шаблоны данных, с другой стороны, позволяют «на лету» создавать элементы  управления для представления данных (подобная идея реализована в языке XSLT – Extensible  Stylesheet Language Transformations). В модели шабло нов данных элементы  управления могут с помощью привязок обращаться  к дан ным, то есть читать и потенциально даже записывать  данные обратно в источник.

С помощью преобразований можно получить очень выразительные представ ления данных. Мы начнем изучение данных в WPF с одного из наиболее употре бительных  источников  – ресурсов.

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

  • Комментарии