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) и покажем, как добиться результата с задержкой. Задержка в управлении параметрами объекта — это разумный выход в данной ситуации. Для включения обратной связи (то есть, слежения в направлении Text►Size) задействуем кнопку 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 формы.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.