Режимы привязки данных

28

В операциях привязки данных поддерживается атрибут Mode, с помощью которого определяется порядок синхронизации источника и адреса этих операций во время работы приложения. Подобным способом можно, в частности, обеспечить своевременное обновление адресата при изменении источника или наоборот, автоматическое обновление источника при изменении адресата. Для этих целей в атрибуте Mode может быть установлено одно из следующих значений:

За более подробным описанием работы этих режимов привязки на платформе WPF, обращайтесь к следующей статье - WPF/binding_and_styles_WPF/level8/8_2.php

Установка режимов привязки данных в Expression Blend

Для того чтобы ознакомиться поближе с наиболее распространенными режимами привязки данных, добавьте еще несколько элементов управления на монтажном столе. В частности, введите элемент управления типа Label, указав в его свойстве Content - текстовую надпись Change Number (Изменить число), еще один элемент управления типа Slider, а также элемент управления myTextBox типа TextBox, удовлетворившись исходными настройками свойств двух последних.

А теперь привяжите свойство Value четвертого элемента управления типа Slider к свойству Text элемента управления типа TextBox, но на этот раз поступите иначе, чем прежде. Сначала выберите элемент управления типа TextBox на монтажном столе и найдите свойство Text на панели Properties. Затем щелкните на кнопке Advanced options и выберите пункт Element Property Binding (Привязка свойства элемента) из всплывающего меню:

Element Property Binding

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

После этого можете выбрать свойство Value из раскрывающегося списка в открывшемся диалоговом окне. А если вы развернете область дополнительных параметров настройки в нижней части этого окна, щелкнув на пиктограмме стрелки, направленной вниз, то обнаружите целый ряд доступных для выбора режимов привязки данных. Выберите пока что режим OneWay (Односторонняя привязка данных):

Установка режима односторонней привязки

Установка режима двухсторонней привязки данных

Если вы теперь запустите свое приложение на выполнение, то сможете убедиться, что текстовое поле обновляется при перемещении ползунка Change Number. Но если вы попытаетесь ввести в этом текстовом поле значение, находящееся в пределах области действия четвертого элемента управления типа Slider, например число 100, то его ползунок не изменит своего положения, поскольку в режиме односторонней привязки данных обновляется только адресат, когда изменяется источник данной операции, но не наоборот.

Если же вы перенастроите эту операцию на режим двухсторонней привязки данных, то сможете изменить положение ползунка, введя новые данные в текстовом поле.

Для коррекции любой привязки данных найдите свойство, настроенное на нее в настоящий момент (в данном случае — свойство Text), щелкните на кнопке Advanced options и выберите, как обычно, пункт Data Binding из всплывающего меню. Потом можете выбрать режим двухсторонней привязки данных (TwoWay) и определить порядок обновления исходного свойства. В качестве примера на рисунке показан результат обновления элемента управления типа Slider, когда элемент управления типа TextBox теряет логический фокус:

Установка режима двухсторонней привязки

Теперь можете убедиться сами, что после ввода значения в текстовом поле и потере им логического фокуса, например при нажатии клавиши табуляции, положение ползунка изменяется. Если же вы проанализируете разметку, автоматически сформированную в коде XAML, то обнаружите, что свойство Text элемента управления типа TextBox настроено так, как показано ниже. Обратите, в частности, внимание на атрибут Mode:

<TextBox x:Name="myTextBox" TextWrapping="Wrap" HorizontalContentAlignment="Center" 
		VerticalContentAlignment="Center" FontSize="18.667" 
		Text="{Binding Value, ElementName=slider3, Mode=TwoWay, UpdateSourceTrigger=LostFocus}"/>

На этом первый пример, демонстрирующий привязку данных, завершается. Надеюсь, у вас сложилось достаточно полное представление об установлении связей между взаимосвязанными свойствами элементов пользовательского интерфейса. А далее речь пойдет о том, как связываются свойства элементов управления и объектов, не относящихся к пользовательскому интерфейсу.

Пройди тесты
Лучший чат для C# программистов