Поделиться через


Обзор привязки данных WPF с помощью LINQ to XML

В этой статье представлены функции динамической привязки данных в пространстве имен System.Xml.Linq. Эти функции можно использовать в качестве источника данных для элементов пользовательского интерфейса в приложениях Windows Presentation Foundation (WPF). В этом сценарии используются специальные динамические свойстваSystem.Xml.Linq.XAttribute и System.Xml.Linq.XElement.

XAML и LINQ to XML

Язык разметки расширяемых приложений (XAML) — это диалект XML, созданный корпорацией Майкрософт для поддержки технологий .NET. Он используется в WPF для представления элементов пользовательского интерфейса и связанных функций, таких как события и привязка данных. В Windows Workflow Foundation XAML используется для представления структуры программы, например управления программой (рабочих процессов). XAML позволяет декларативным аспектам технологии отделяться от связанного процедурного кода, который определяет более индивидуальное поведение программы.

Существует два широких способа взаимодействия XAML и LINQ to XML:

  • Так как ФАЙЛЫ XAML являются хорошо сформированными XML, их можно запрашивать и управлять с помощью xml-технологий, таких как LINQ to XML.

  • Так как запросы LINQ to XML представляют источник данных, эти запросы можно использовать в качестве источника данных для привязки данных для элементов пользовательского интерфейса WPF.

В этой документации описывается второй сценарий.

Привязка данных в Windows Presentation Foundation

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

Компонент Описание
Целевой объект привязки Элемент пользовательского интерфейса, связанный с источником данных. Визуальные элементы в WPF являются производными от класса UIElement.
Целевое свойство Свойство зависимости целевого объекта привязки, которое отражает значение источника привязки данных. Свойства зависимостей напрямую поддерживаются классом DependencyObject, от которого UIElement наследуется.
Источник привязки Исходный объект для одного или нескольких значений, предоставленных элементу пользовательского интерфейса для презентации. WPF автоматически поддерживает следующие типы в качестве источников привязки: объекты CLR, объекты данных ADO.NET, XML-данные (из запросов XPath или LINQ to XML) или другого DependencyObject.
Исходный путь Свойство источника привязки, определяющего значение или набор значений, которые должны быть привязаны.

Свойство зависимостей — это концепция, относящаяся к WPF, представляющей динамическое вычисляемое свойство элемента пользовательского интерфейса. Например, свойства зависимостей часто имеют значения или значения по умолчанию, предоставляемые родительским элементом. Эти специальные свойства поддерживаются экземплярами класса DependencyProperty (а не полями, как со стандартными свойствами). Дополнительные сведения см. в разделе Обзор свойств зависимостей.

Динамическая привязка данных в WPF

По умолчанию привязка данных возникает только при инициализации целевого элемента пользовательского интерфейса. Это называется однократной привязкой . В большинстве случаев это недостаточно; Как правило, решение для привязки данных требует динамического распространения изменений во время выполнения, используя одно из следующих действий:

  • Односторонняя привязка приводит к тому, что изменения на одной стороне автоматически обновляются. Чаще всего изменения источника отражаются в целевом объекте, но обратный вариант иногда может оказаться полезным.

  • В двухсторонней привязке изменения источника автоматически распространяются в целевой, а изменения в целевом автоматически распространяются в источник.

Для односторонной или двусторонней привязки источник должен реализовать механизм уведомлений об изменении, например путем реализации интерфейса INotifyPropertyChanged или использования шаблона PropertyNameChanged для каждого поддерживаемого свойства.

Дополнительные сведения о привязке данных в WPF см. в Привязка данных (WPF).

Динамические свойства в классах LINQ to XML

Большинство классов LINQ to XML не соответствуют соответствующим динамическим источникам данных WPF. Некоторые из наиболее полезных сведений доступны только с помощью методов, а не свойств и свойств в этих классах не реализуют уведомления об изменениях. Для поддержки привязки данных WPF LINQ to XML предоставляет набор динамических свойств .

Эти динамические свойства — это специальные свойства во время выполнения, которые дублируют функциональные возможности существующих методов и свойств в классах XAttribute и XElement. Они были добавлены в эти классы исключительно для того, чтобы они могли выступать в качестве динамических источников данных для WPF. Для удовлетворения этой потребности все эти динамические свойства реализуют уведомления об изменениях. Подробный справочник по этим динамическим свойствам представлен в следующем разделе динамических свойств LINQ to XML.

Заметка

Многие стандартные общедоступные свойства, найденные в различных классах в пространстве имен System.Xml.Linq, можно использовать для однократной привязки данных. Однако помните, что ни источник, ни целевой объект не будут динамически обновляться в рамках этой схемы.

Доступ к динамическим свойствам

Динамические свойства в классах XAttribute и XElement не могут быть доступны как стандартные свойства. Например, на языках, совместимых с CLR, таких как C#, они не могут быть следующими:

  • Доступ непосредственно во время компиляции. Динамические свойства невидимы для компилятора и Visual Studio IntelliSense.

  • Объект может быть обнаружен или доступен во время выполнения с использованием отражения .NET. Даже во время выполнения они не являются свойствами в базовом смысле среды CLR.

В C# динамические свойства можно получить только во время выполнения через объекты, предоставляемые пространством имен System.ComponentModel.

В отличие от этого, в динамических свойствах источника XML можно получить доступ через простую нотацию в следующей форме:

<object>.<dynamic-property>

Динамические свойства этих двух классов либо становятся значением, которое можно использовать напрямую, либо переходят в индексатор, которому необходимо предоставить индекс для получения результирующего значения или коллекции значений. Последний синтаксис имеет форму:

<object>.<dynamic-property>[<index-value>]

Дополнительные сведения см. в LINQ to XML: динамические свойства.

Для реализации динамической привязки WPF динамические свойства будут использоваться с объектами, предоставляемыми пространством имен System.Windows.Data, в частности классом Binding.

См. также