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

Оценить
(0 голоса)

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

Итак, кратко рассмотрим, как мы можем установить подключение привязки данных при помощи WPF. Ключевым здесь является класс System.Windows. Data.Binding. Он вы­ступает посредником, отвечающим за связь элемента управления с источником данных. Для успешного объявления привязки нам нужно знать три вещи:

□    Какое свойство элемента управления пользовательского интерфейса мы хотим привя­зать?

□    К какому источнику данных мы хотим привязаться?

□    Какой конкретно элемент или свойство внутри источника данных содержит интере­сующие нас данные?

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

Binding binding = new Binding(); binding.Source = _stringList;

listBoxl.SetBinding(ListBox.ItemsSourceProperty, binding);

Предыдущий фрагмент кода создает объект Binding, настраивает нашу коллекцию List<string> в качестве источника объекта Binding, а затем для нашего элемента управ­ления (ListBox) вызывает SetBinding, передавая в него экземпляр объекта Binding и то свойство элемента управления, к которому мы хотим привязать наш источник данных.

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

Это значительно упрощает наш код привязки данных. Мы можем настроить контекст в кон­структоре Window следующим образом:

this.DataContext = _stringList;

Теперь мы просто указываем этот контекст данных при помощи тега в XAML-элементе для ListBox:

CListBox Name="listBoxl" IternsSource="{Binding}" />

Привязывающий объект в этом случае будет автоматически искать объекты, скрытые в кон­тексте данных где-то внутри дерева объектов. Когда он найдет такой объект, он автоматиче­ски привяжет его.

Это хорошо работает для нашего простого примера List<string>, но что если мы попыта­емся привязать к списку целую коллекцию нестандартных объектов? Если у нас есть про­стой класс Employee со свойствами Name и PhoneNbr, то как нам привязать коллекцию этих объектов и показать имя сотрудника? Процесс останется таким же. Если мы создаем класс Employee, а затем создаем коллекцию List<Employee>, то весь этот код по-прежнему работает. Но есть и проблема. Она показана на рис. 16.18.

Рис. 16.18. Привязка к нестандартным объектам

Мы еще не сказали движку привязки, как именно мы хотим представить наши данные в спи­ске. По умолчанию процесс привязки просто вызовет Tostring для каждого объекта.

Быстрым решением этой проблемы было бы просто перекрыть метод Tostring: public override string ToString()

{

return _name;

}

В данном случае это решит проблему. Но более надежный подход потребует использования DataTemplate. Мы опишем этот подход в разд. "Создание простого приложения для про­смотра изображений" далее в этой главе.

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

Перенаправленные события
Начинаем компоновку
Хранение изображений
Резюме
.NET фирма Microsoft

Добавить комментарий


Защитный код
Обновить

© 2017 www.visualstudios.ru. Все права защищены.