Механизм привязки данных (DataBinding)

Страницы работы

Содержание работы

Механизм привязки данных (DataBinding)

DataBinding — это механизм привязки данных (в памяти) к элементам управления на форме (Windows Form или Web Form). Рассмотрим самый простой сценарий привязки данных. Создайте Windows-приложение с именем DataBinding и положите на форму элементы управления, как показано на рисунке. Идентификаторы (имена) элементов заданы так: MainForm,lblFormSize, tFormSize, bFormSize.

Мы собираемся привязать свойство Text окна редактирования (TextBox с именем tFormSize) к свойству Size нашей формы. Механизм привязки данных способен работать в двух направлениях. Это означает, что, изменяя размеры формы, мы увидим, их текстовое отображение в окне tFormSize, и, наоборот, изменяя текст в окне редактирования, мы убедимся, что размеры формы привязаны к нему, то есть, отслеживают изменения текста. Введите обработчик события Load для нашей формы и вставьте в него код привязки данных.

private void MainForm_Load(object sender, EventArgs e)

{

tFormSize.DataBindings.Add("Text", this, "Size", true, DataSourceUpdateMode.Never);

}

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

¨  Попробуйте изменить текст окна редактирования (разумным способом, не вводите имя вашей тещи) и убедитесь, что ничего не происходит.

Сейчас механизм отслеживания данных работает только в одну сторону. Такой режим работы определен константой перечисления DataSourceUpdateMode.Never.

¨  Исследуйте другие варианты задания параметров. Вместо Never задайте OnPropertyChanged и повторите опыт.

Если при вводе текста (желаемых размеров формы) у вас возникнут проблемы, продолжайте ввод вслепую. В любой момент можно воспользоваться мышью и восстановить приемлемые размеры. Этот опыт показывает, что механизм привязки данных в режиме OnPropertyChanged действует в обе стороны и реагирует мгновенно.

¨  Добавьте на форму элемент типа ErrorProvider с именем errorProvider. Установите его свойство BlinkStyle в значение NeverBlink.

¨  В метод MainForm_Load добавьте код привязки этого элемента к свойствам нашей формы.

errorProvider.DataSource = this;

¨  Повторите опыт по управлению размерами формы из окна редактирования и попытайтесь ввести в окно редактирования неприемлемый текст (например, "size"). ErrorProvider сигнализирует об ошибке и не позволяет вывести фокус из окна редактирования tFormSize.

¨  Для устранения эффекта скрытия окна tFormSize установите свойство формы MinimumSize в 200; 60.

Вернемся к режиму одностороннего обновления данных (DataSourceUpdateMode.Never) и покажем, как добиться результата с задержкой. Задержка в управлении параметрами объекта — это разумный выход в данной ситуации. Для включения обратной связи (то есть, слежения в направлении TextSize) задействуем кнопку Reset (с именем bFormSize). Вы можете сделать это обычным способом (ввода реакции на событие Click в режиме дизайна), но мы покажем новый способ введения реакции — с помощью анонимного делегата. Во избежание ошибок приведем полный текст метода MainForm_Load.

private void MainForm_Load(object sender, EventArgs e)

{

tFormSize.DataBindings.Add("Text", this, "Size", true, DataSourceUpdateMode.Never);

errorProvider.DataSource = this;

bFormSize.Click += delegate(object button, EventArgs args)

{

tFormSize.DataBindings[0].WriteValue();

};

}

¨  Обратите внимание на изящный облик анонимного делегата (а также на точку с запятой в конце декларации). По сути, в правой части операции присвоения (+=) стоит тело функции. В этой функции добывается уже существующая привязка (DataBindings[0]) и выполняется отслеживание текста (WriteValue).

Это напоминает прием, давно используемый в языке JScript. Приведем пример, рассматриваемый в рамках нашего курса ASP.NET. Здесь в стандартный класс String добавляется метод Trim. В языке JScript не используется понятие класса, в нем каждый объект самостоятелен, но понятие прототипа (тем не менее) аналогично понятию класса в языках C++ и C#.

String.prototype.Trim = function ()

{

return this.replace (/(^\s*)|(\s*$)/g, "");// Убирает лишние пробелы в начале и конце строки

}

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

Вернемся к нашему приложению. Для удобства управления кнопкой найдите свойство формы AcceptButton (оно расположено в категории Misc) и установите его значение в bFormSize (адрес нашей кнопки). Теперь после ввода изменений в окно редактирования вы можете нажать клавишу Enter и это будет равносильно нажатию кнопки Reset.

Привязка к данным массива

Различают простое связывание данных (Simple DataBinding) и сложное (Complex DataBinding). Простое — привязывает какое-либо свойство элемента управления на форме к текущему значению чего-то изменяющегося в памяти. Такой тип привязки мы использовали в предыдущем примере. Свойство Text окна редактирования было привязано к свойству Size формы.

Похожие материалы

Информация о работе