Механизъм за обвързване на данни (DataBinding)

Работни страници

databinding

механизъм

обвързване

данни

механизъм

Съдържанието на произведението

Механизъм за обвързване на данни (DataBinding)

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

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

private void MainForm_Load(изпращач на обект, EventArgs e)

tFormSize.DataBindings.Add("Текст", this, "Размер", true, DataSourceUpdateMode.Never);

¨ Стартирайте приложението и опитайте да промените размера на главния прозорец с мишката. Уверете се, че текстът на полето за редактиране проследява тези промени.

¨ Опитайте да промените текста в полето за редактиране (по разумен начин, не въвеждайте името на свекърва си) и се уверете, че нищо не се случва.

Сега механизмът за проследяване на данни работи само в една посока. Този режим на работа се определя от константата за изброяванеDataSourceUpdateMode.Never.

¨ Разгледайте други опциинастройка на параметрите. ЗаменетеНикога сOnPropertyChanged и опитайте отново.

Ако имате проблеми с въвеждането на текст (желаните размери на формата), продължете да пишете на сляпо. По всяко време можете да използвате мишката и да възстановите приемливите размери. Този опит показва, че механизмът за обвързване на данни в режимOnPropertyChanged работи и в двете посоки и реагира незабавно.

¨ Добавете елемент от типErrorProvider към формуляра с имеerrorProvider. Задайте свойствотоBlinkStyle наNeverBlink.

¨ В методаMainForm_Load добавете кода за обвързване на този елемент към свойствата на нашата форма.

¨ Повторете опита с управлението на размера на формуляра от прозореца за редактиране и опитайте да въведете неподходящ текст в прозореца за редактиране (например „размер“).ErrorProvider сигнализира за грешка и не позволява фокусът да бъде изваден от прозореца за редактиранеtFormSize.

¨ За да премахнете ефекта от скриването на прозорецаtFormSize, задайте свойството на формуляраMinimumSize на200; 60.

Нека се върнем към режима за еднопосочно актуализиране на данни (DataSourceUpdateMode.Never ) и да покажем как да постигнем резултат със закъснение. Забавянето на управлението на параметрите на обекта е разумен изход в тази ситуация. За да разрешите обратна връзка (т.е. проследяване в посокаТекстРазмер ), използвайте бутонаНулиране (с имеbРазмер на формуляр ). Можете да го направите по обичайния начин (инжектиране на отговор на събитиеClick в режим на проектиране), но ние ще ви покажем нов начин за инжектиране на отговор - използване на анонимен делегат. За да избегнете грешки, тук е пълният текст на методаMainForm_Load.

private void MainForm_Load(изпращач на обект, EventArgs e)

tFormSize.DataBindings.Add("Текст", this, "Размер", true, DataSourceUpdateMode.Never);

bFormSize.Click += делегат(бутон за обект, EventArgs аргументи)

¨ Обърнете внимание на елегантния външен вид на анонимния делегат (както и точката и запетая в края на декларацията). Всъщност дясната страна на оператора за присвояване (+=) е тялото на функцията. Тази функция извлича вече съществуващото обвързване (DataBindings[0] ) и извършва проследяване на текст (WriteValue ).

Това напомня на техника, използвана отдавна в езикаJScript. Нека вземем пример от нашия курс по ASP.NET. Тук методътTrim се добавя към стандартния класString. Езикът JScript не използва концепцията за клас, в която всеки обект е независим, но концепцията за прототип (въпреки това) е подобна на концепцията за клас в C++ и C#.

return this.replace (/(^\s*)(\s*$)/g, "");// Премахва излишните интервали в началото и края на низа

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

Свързване към масив от данни

Прави се разлика между просто обвързване на данни (SimpleDataBinding ) и сложно обвързване на данни (Complex DataBinding ). Просто - обвързва някакво свойство на контролата във формуляра с текущата стойност на нещо, което се променя в паметта. Използвахме този тип обвързване в предишния пример. СвойствотоТекст на полето за редактиране е обвързано със свойствотоРазмер на формуляра.