Создание привязки в коде

20

При построении окна обычно наиболее эффективно объявлять выражение привязки в разметке XAML с помощью расширения разметки Binding. Тем не менее, допускается также создавать привязку и в коде.

Вот как можно создать привязку для элемента TextBlock, показанного в примере из предыдущей статьи:

Binding bind = new Binding();
bind.Source = sld;
bind.Path = new PropertyPath("Value");
bind.Mode = BindingMode.TwoWay;
txb.SetBinding(TextBlock.FontSizeProperty, bind);

Для удаления привязки в коде предусмотрены два статических метода класса BindingOperations. Метод ClearBinding() принимает ссылку на свойство зависимости, которое имеет привязку, подлежащую удалению, а метод ClearAllBindings() удаляет все привязки данных элемента:

BindingOperations.ClearAllBindings(txb);

И ClearBinding(), и ClearAllBindings() используют метод ClearValue(), который каждый элемент наследует от базового класса DependencyObject. Метод ClearValue() просто удаляет локальное значение свойства (которым в данном случае является выражение привязки).

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

Создание динамических привязок

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

Удаление привязки

Чтобы удалить привязку и получить возможность установки свойства обычным образом, понадобится помощь метода ClearBinding() или ClearAllBindings(). Недостаточно просто присвоить новое значение свойству. В случае использования двунаправленной привязки установленное значение распространится на привязанный объект, и оба свойства останутся синхронизированными.

С помощью методов ClearBinding() и ClearAllBindings() можно удалить любую привязку. Не имеет значения, применялась привязка программно или в коде XAML.

Создание специальных элементов управления

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

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