Привязка (binding). Основы и особенности применения

Содержание

Слайд 2

Привязка. Введение

Простейший сценарий привязки данных подразумевает ситуацию, когда исходным объектом является элемент

Привязка. Введение Простейший сценарий привязки данных подразумевает ситуацию, когда исходным объектом является
WPF, а исходным свойством — свойство зависимости. Причина в том, что свойство зависимости имеет встроенную поддержку уведомлений об изменениях. В результате, когда значение свойства зависимости изменяется в исходном объекте, привязанное свойство целевого объекта немедленно обновляется. Это именно то, что требуется, и происходит оно без необходимости построения любой дополнительной инфраструктуры.

Слайд 3

Связывание элементов
TickFrequency="5" TickPlacement="BottomRight">

Связывание элементов TickFrequency="5" TickPlacement="BottomRight"> FontSize="{Binding ElementName=sld, Path=Value}">

FontSize="{Binding ElementName=sld, Path=Value}">

Слайд 4

Ошибки привязки

WPF не генерирует исключения для уведомления о проблемах привязки данных. Если

Ошибки привязки WPF не генерирует исключения для уведомления о проблемах привязки данных.
указан несуществующий элемент или свойство, никакого сообщения об этом не будет; вместо этого данные просто не попадут в целевое свойство.
WPF выводит трассировочную информацию, которая детализирует сбои в привязке. Во время отладки приложения эта информация появляется в выходном окне Visual Studio.

Слайд 5

Режимы привязки

TickFrequency="5" TickPlacement="BottomRight">

Режимы привязки TickFrequency="5" TickPlacement="BottomRight"> FontSize="{Binding ElementName=sld, Path=Value, Mode=TwoWay}">

FontSize="{Binding ElementName=sld, Path=Value, Mode=TwoWay}">

Слайд 6

Режимы привязки

OneWay - Целевое свойство обновляется при изменениях исходного свойства
TwoWay - Целевое

Режимы привязки OneWay - Целевое свойство обновляется при изменениях исходного свойства TwoWay
свойство обновляется при изменениях исходного свойства, а исходное свойство обновляется при изменении целевого свойства
OneTime - Целевое свойство устанавливается изначально на основе значения исходного свойства. Однако с этого момента изменения игнорируются (если только привязка не устанавливается на совершенно другой объект или не вызывается BindingExpression.UpdateTarget()). Обычно этот режим используется для сокращения накладных расходов, если известно, что целевое свойство не изменится
OneWayToSource - Подобно OneWay, но действует в обратном направлении. Исходное свойство обновляется, когда изменяется целевое свойство (что может показаться несколько странным), но целевое свойство никогда не обновляется
Default - Этот тип привязки зависит от целевого свойства. Это либо TwoWay (для устанавливаемых пользователем свойств, таких как TextBox.Text), либо OneWay (для всего остального). Все привязки используют данный подход, если только не указано иное

Слайд 7

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

Binding bind = new Binding();
bind.Source = sld;
bind.Path = new

Создание привязки в коде Binding bind = new Binding(); bind.Source = sld;
PropertyPath("Value");
bind.Mode = BindingMode.TwoWay;
txb.SetBinding(TextBlock.FontSizeProperty, bind);
//удаляем конкретную привязку
BindingOperations.ClearBinding(txb, TextBlock.FontSizeProperty);
//удалить все привязки
BindingOperations.ClearAllBindings(txb);

Слайд 8

Обновление привязок

Изменения, протекающие в обратном направлении — от цели к источнику —

Обновление привязок Изменения, протекающие в обратном направлении — от цели к источнику
не обязательно происходят немедленно. Их поведение управляется свойством Binding.UpdateSourceTrigger, которое принимает одно из значений, описанных ниже
PropertyChanged - Источник обновляется немедленно, когда изменяется целевое свойство
LostFocus - Источник обновляется немедленно, когда изменяется целевое свойство и цель теряет фокус
Explicit - Источник не обновляется, пока не будет вызван метод BindingExpression.UpdateSource()
Default - Поведение обновления определяется метаданными целевого свойства (формально — его свойства FrameworkPropertyMetadata.DefaultUpdateSourceTrigger). Для большинства свойств поведением по умолчанию будет PropertyChanged, хотя свойство TextBox.Text обладает поведением по умолчанию LostFocus

Слайд 9

Обновление привязок

Обновление привязок

Слайд 10

Привязка к объектам

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

Привязка к объектам Информация, которую необходимо отобразить, должны храниться в общедоступных свойствах.
данных WPF не может извлекать приватную информацию или читать общедоступные поля.
При привязке к объекту, не являющемуся элементом, следует отказаться от свойства Binding.ElementName и применять вместо него одно из следующих свойств:

Слайд 11

Привязка к объектам

Source - Ссылка, указывающая на исходный объект; другими словами, это

Привязка к объектам Source - Ссылка, указывающая на исходный объект; другими словами,
объект, поставляющий данные.
RelativeSource - Указывает на исходный объект, использующий объект RelativeSource, который позволяет базировать ссылку на текущем элементе. Это специализированный инструмент, который удобен при написании шаблонов элементов управления и шаблонов данных.
DataContext - Если источник не был указан с помощью свойства Source или RelativeSource, то среда WPF производит поиск в дереве элементов, начиная с текущего элемента. Она проверяет свойство DataContext каждого элемента и использует первый из них, который не равен null. Свойство DataContext исключительно полезно, когда нужно привязать несколько свойств одного объекта к разным элементам, потому что можно установить свойство DataContext высокоуровневого объекта контейнера, вместо его установки непосредственно на целевой элемент.

Слайд 13

RelativeSource

FontSize="{Binding ElementName=sld, Path=Value, Mode=TwoWay}">



AncestorType="{x:Type Window}">

RelativeSource FontSize="{Binding ElementName=sld, Path=Value, Mode=TwoWay}"> AncestorType="{x:Type Window}">



Слайд 14

RelativeSource

FontSize="{Binding ElementName=sld, Path=Value, Mode=TwoWay}"
Text="{Binding Path=Title, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}">

RelativeSource FontSize="{Binding ElementName=sld, Path=Value, Mode=TwoWay}" Text="{Binding Path=Title, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}">

Слайд 15

RelativeSource. Режимы

Self - Выражение привязывается к другому свойству того же элемента
FindAncestor -

RelativeSource. Режимы Self - Выражение привязывается к другому свойству того же элемента
Выражение привязывается к родительскому элементу. WPF будет проводить поиск вверх по дереву элементов, пока не найдет нужный родительский элемент. Чтобы указать родителя, необходимо также установить свойство AncestorType для индикации типа родительского элемента, который должен быть найден. Дополнительно с помощью свойства AncestorLevel можно пропустить определенное количество совпадений указанного элемента. Например, если требуется привязка к третьему элементу типа ListBoxItem при восхождении вверх по дереву, то следует установить AncestorType={x:Type ListBoxItem} и AncestorLevel=3, тем самым пропуская первые два ListBoxItem. По умолчанию AncestorLevel равен 1, и поиск прекращается на первом найденном элементе.

Слайд 16

RelativeSource. Режимы

PreviousData - Выражение осуществляет привязку к предыдущему элементу данных в списке,

RelativeSource. Режимы PreviousData - Выражение осуществляет привязку к предыдущему элементу данных в
привязанном к данным. Это можно использовать в элементе списка
TemplatedParent - Выражение осуществляет привязку к элементу, к которому применен шаблон. Этот режим работает, только если привязка находится внутри шаблона элемента управления или шаблона данных

Слайд 17

DataContext

Binding bind = new Binding();
bind.Source = План;
bind.Path = new PropertyPath("Element[" + r.Key

DataContext Binding bind = new Binding(); bind.Source = План; bind.Path = new
+ "].Elements[Раздел][0]");
tab.SetBinding(TabItem.DataContextProperty, bind);
Имя файла: Привязка-(binding).-Основы-и-особенности-применения.pptx
Количество просмотров: 45
Количество скачиваний: 0