Привязка XML в WPF на примере программы чтения RSS-канала
Автор: Абхишек Сюр (Abhishek Sur) Становящийся все популярнее XAML теперь появился и в приложениях для мобильных устройств. Недавно, изучая Интернет, я обнаружил, что последняя версия мобильных интерфейсов Windows 7 использует Silverlight для работы с интерфейсами. Мне тут же пришла в голову мысль попробовать Silverlight, чтобы расширить мою базу знаний. Таким образом, я установил этот пакет на свою машинку и попробовал. Он отлично работает, и мне действительно понравилось снова видеть Silverlight установленным на это мобильное устройство. Вместо использования XNA для настоящего 3D-стиля построения приложения, я попробовал несколько простых программ для работы с этим выпуском Silverlight, и все отлично работало. Простое приложение работает максимально просто, как и обычные приложения Silverlight. При создании простого приложения я обнаружил, что XML-привязка внутри приложения WPF — это интересная часть XAML-привязок. В этой статье я покажу, как можно реализовать привязку свойства с помощью XMLDataSource. XML — это очень важная часть любого приложения. При создании приложения обычно нужно написать много кода для обработки потока данных XML. Загрузить данные с веб-сервера можно с локального компьютера или с помощью веб-клиента. В WPF встроена поддержка XML-привязок. Рассмотрим XML-привязки подробно на примере кода. Пусть есть следующий фрагмент XML:
Теперь создадим код, привязывающий все элементы приведенного выше XML-фрагмента.
Прежде всего, мы добавили новое окно и добавили XmlDataSource в качестве ресурса. Обратите внимание, что также можно использовать x:Data, чтобы определить XML-код XmlDataSource прямо внутри файла, например так:
Обратите внимание, что я намеренно добавил xmlns в тег data, как если бы XML не должен был наследоваться от основного пространства имен. XPath внутри XmlDataProvider вызывает чтение XML-кода из указанного пути. Поэтому в случае нашего XML-кода для чтения данных будет использован путь /data/packet/names. Перейдем к привязкам.
В приведенном выше XAML-коде можно видеть, что я вставил datacontext тега Grid (сетки) в ресурс XmlDataProvider. Помните, что @ используется для атрибутов, а / используется для тегов. Поэтому первый блок текста содержит @description, что означает строку, написанную внутри атрибута описания (description) тега Names. Tеперь, перейдя к коллекции имен, воспользуемся списком, чтобы показать все элементы XML-данных. Использование ItemsSource позволяет привязать данные с конкретным значением XPath. Здесь используется nametype, так как основная коллекция относится к типу nametype. В datatemplate (шаблон данных) помещен один TextBlock для каждого набора данных с множественной привязкой. Атрибуты firstname и lastname используются для привязки к свойству Text элемента TextBlock. В этой ситуации, как можно видеть, я использовал @firstname и @lastname, что будет гарантировать оценку модулем привязки элемента Attribute, а не элемента innerText. Строка состояния (StatusBar) позволяет показать привязанные данные для выбранного элемента SelectedItem списка ListBox. Следует запомнить:
Небольшая программа чтения RSS-канала Теперь, прояснив все моменты, построим пример программы чтения RSS-канала. RSS-канал — это специальная XML-схема, поэтому при загрузке RSS-канала в элемент XMLDataProvider понадобится выполнить ее разбор в специальном формате. Посмотрим, на что похож XAML-код.
Код этого примера выглядит почти так же, как уже обсужденный код. Основное отличие состоит в том, что теперь выполняется разбор XML-кода, поступающего из RSS-канала. Здесь XMLDataProvider указывает на внешний веб-адрес. Программе после запуска требуется около секунды для загрузки RSS-канала из внешнего источника. После его загрузки конкретные узлы привязываются к заголовку (Title), а описания и элементы показываются в списке ListBox. Надеюсь, что эта статья поможет понять, как можно загрузить XML-код, используя привязку. Если появятся какие-то вопросы, напишите мне. Спасибо за внимание. |