Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технология Windows Presentation Foundation.docx
Скачиваний:
45
Добавлен:
18.08.2019
Размер:
850.41 Кб
Скачать

9. Привязка данных

9.1. Базовые концепции привязки данных

Привязка данных (data binding) – это отношение, которое используется для извлечения информации из источника данных и установки свойства зависимостей в целевом объекте. Целевой объект обычно является элементом управления. Источником данных может быть произвольный объект .NET. Привязка способна (при определённых условиях) автоматически обновлять целевое свойство при изменении данных источника.

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

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

2. Условие обновления источника. Если привязка двунаправленная или от цели к источнику, можно настроить момент обновления источника данных.

3. Конвертеры значений. Привязка может выполнять автоматическое преобразование данных при их перемещении от источника к целевому объекту и наоборот.

4. Правила проверка данных. Привязка может включать правила проверки данных на корректность и поведение, выполняемое при нарушении правил.

Рис. 26. Концепция привязки данных.

В WPF привязка данных описывается либо декларативно, либо в коде. В любом случае используется объект класса System.Windows.Data.Binding (унаследованный от MarkupExtension). В табл. 5 приведено описание основных свойств этого класса.

Таблица 5

Свойства класса Binding

Имя свойства

Описание

Converter

Конвертер для преобразования данных при привязке

ConverterCulture

Культура, передаваемая в конвертер

ConverterParameter

Произвольный объект, передаваемый в конвертер

ElementName

Имя элемента в дереве объектов, который будет источником данных для привязки

FallbackValue

Значение для целевого свойства, которое будет использоваться, если операция привязки закончилась неудачей

Mode

Направление привязки (перечисление BindingMode):

OneWay – от источника к целевому свойству;

TwoWay – от источника к целевому свойству и наоборот;

OneTime – целевое свойство устанавливается на основе данных источника, затем изменения в источнике игнорируются;

OneWayToSource – источник обновляется при изменении целевого свойства;

Default – используется направление привязки, заданное в метаданных свойства зависимостей

IsAsync

При установке в true привязка выполняется асинхронно

NotifyOnSourceUpdated

При установке в true при передаче информации от источника к целевому объекту генерируется событие SourceUpdated

NotifyOnTargetUpdated

При установке в true при передаче информации от целевого объекта к источнику генерируется событие TargetUpdated

NotifyOnValidationError

При установке в true и наличии ошибок проверки данных у целевого объекта генерируется присоединённое событие Error

Path

Путь к информации в источнике данных. Аргумент конструктора класса Binding

RelativeSource

Путь к источнику, задаваемый относительно целевого объекта

Source

Источник данных

StringFormat

Форматирование для извлекаемых данных строкового типа

TargetNullValue

Значение, которое будет использоваться для целевого свойства, если из источника извлекается null

ValidatesOnDataErrors

Булево значение: указывает на использование объектом-источником интерфейса IDataErrorInfo

ValidatesOnExceptions

Булево значение: указывает на необходимость рассматривать исключения как ошибки проверки данных

ValidationRules

Коллекция объектов, определяющих правила проверки данных

UpdateSource-

ExceptionFilter

Метод обработки исключений, генерируемых при проверке данных

UpdateSourceTrigger

Задаёт момент обновления источника при изменениях в целевом свойстве (перечисление UpdateSourceTrigger):

PropertyChanged – немедленно при изменении;

LostFocus – при потере целевым элементом фокуса ввода;

Explicit – при вызове метода UpdateSource();

Default – по значению, заданному в метаданных свойства зависимостей при помощи DefaultUpdateSourceTrigger

XPath

Выражение XPath. Может использоваться, если источник привязки возвращает XML

Класс Binding позволяет описывать привязку в XAML или в коде. В следующем фрагменте разметки XAML привязка соединяет два свойства разных элементов управления – при перемещении слайдера автоматически меняется размер шрифта текста:

<StackPanel>

<Slider x:Name="slider" Minimum="1" Maximum="40" />

<TextBlock x:Name="text" Text="Sample Text"

FontSize="{Binding ElementName=slider, Path=Value}" />

</StackPanel>

Рассмотрим этот же пример, реализованный при помощи кода:

// создаём и настраиваем объект Binding

var binding = new Binding();

binding.ElementName = "slider";

binding.Path = new PropertyPath("Value");

// устанавливаем привязку

text.SetBinding(TextBlock.FontSizeProperty, binding);

Класс System.Windows.Data.BindingOperations предоставляет набор статических методов для управления привязкой в коде. В частности, метод GetBinding() позволяет получить привязку для указанного целевого объект и его свойства зависимостей, метод SetBinding() устанавливает привязку, а метод ClearBinding() удаляет привязку.

// удаляем установленную привязку для элемента text

BindingOperations.ClearBinding(text, TextBlock.FontSizeProperty);