Привязка в .NET MAUI. Режим привязки

Режим привязки в .NET MAUI определяет в какую сторону будет работать привязка: от источника к цели, от цели к источнику, в обе стороны и так далее.

Режимы привязок в .NET MAUI

Все возможные режимы привязки в .NET MAUI определены в перечислении BindingMode:

Значение Описание
Default 4 Значение по умолчанию, установленное целевого объекта.
OneTime 2 Целевой объект привязки обновляется при запуске приложения или при изменении контекста данных.
OneWay 1 Обновляется только свойство целевого объекта привязки в случае изменения источника.
OneWayToSource 3 Обновляется только свойство источника привязки при изменении цели.
TwoWay 0 Автоматически обновляются свойства и цели и источника. Если меняется свойство источника, то автоматически меняется и привязанное свойство цели и наоборот

В .NET MAUI различные элементы управления и их отдельные свойства могут иметь установленный по умолчанию режим привязки. В большинстве случаев, для свойства элемента управления устанавливается режим привязки OneWay, однако, для некоторых элементов управления может быть установлен режим TwoWay. Например:

Элемент управления Свойство
DatePicker Date 
EditorEntry, SearchBar, и EntryCell Text 
ListView IsRefreshing 
MultiPage SelectedItem 
Picker SelectedIndex и SelectedItem
Slider и Stepper Value
Switch IsToggled
SwitchCell On
TimePicker. Time

Рассмотрим применение различных режимов привязок в .NET MAUI на примерах.

Использование режима привязок

Для привязки мы будем использовать расширение разметки Binding, с которым мы познакомились в предыдущей части. Чтобы установить режим привязки, отличный по установленного по умолчанию, используется параметр Mode в котором указывается одно из значений BindingMode.

Использование режима привязки по умолчанию (Default)

Рассмотрим следующим пример:

<Slider x:Name="SourceSlider" />
<Slider Value="{Binding Source={x:Reference SourceSlider}, Path=Value}"/>
<Label Text="{Binding Source={x:Reference SourceSlider}, Path=Value}"/>

Элемент Slider по умолчанию устанавливает режим привязки для свойства Value как TwoWay. На странице расположено два элемента Slider, один из которых является источником привязки (с именем SourceSlider), а второй слайдер и метка — цели привязки. Таким образом, изменение положения ползунка у источника, будет приводить к тому, что в метке будет отображаться текущее значение свойства Value, а второй Slider будет меняться синхронно с первым. В приложении это будет выглядеть следующим образом:

Использование режима OneTime

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

Перепишем код XAML следующим образом:

<Slider x:Name="SourceSlider" Value="0.5" />
<Slider Value="{Binding Source={x:Reference SourceSlider}, Path=Value, Mode=OneTime}"/>
<Label Text="{Binding Source={x:Reference SourceSlider}, Path=Value}"/>

Теперь второй слайдер получит только начальное значение из SourceSlider и далее значение его свойства Value не будет зависеть от значений в источнике. При запуске приложение оба слайдера будут содержать одно и то же значение — 0.5:

а далее — ни источник, ни целевой объект не будут синхронно обновляться

Использование режима OneWay

Этот тип привязки подходит, если привязываемый элемент управления неявно доступен только для чтения. То есть целевой объект привязки не может влиять на данные в источнике. Например, если вы получаете, какие-то данный из внешнего API, который не позволяет записывать данные, то лучше применить в этом случае режим OneWay, чтобы избежать издержек, связанных с использованием двухсторонней привязки (TwoWay).

Изменим режим привязки на OneWay

<Slider x:Name="SourceSlider" />
<Slider x:Name="TargetSource" Value="{Binding Source={x:Reference SourceSlider}, Path=Value, Mode=OneWay}"/>
<Label Text="{Binding Source={x:Reference SourceSlider}, Path=Value}"/>

Теперь будет изменяться только второй слайдер при изменении первого.

Использование режима OneWayToSource

Этот режим работает противоположно предыдущему, то есть меняется только свойство источника привязки при изменении свойства целевого объекта. Например, такая привязка:

<Slider x:Name="SourceSlider" />
<Slider x:Name="TargetSource" Value="{Binding Source={x:Reference SourceSlider}, Path=Value, Mode=OneWayToSource}"/>
<Label Text="{Binding Source={x:Reference SourceSlider}, Path=Value}"/>

приведет к тому, что при изменении значения Value во втором слайдере будет изменяться и значение у SourceSlider, однако изменение SourceSlider никак не будет отражаться на положение ползунка в целевом объекте.

Использование режима TwoWay

Этот режим, с точки зрения влияния на производительность приложения, является наиболее затратным. В принципе, пример его использования продемонстрирован в самом первом примере. То есть, применительно к объектам Slider вот такой код:

<Slider x:Name="SourceSlider" />
<Slider x:Name="TargetSource" Value="{Binding Source={x:Reference SourceSlider}, Path=Value, Mode=TwoWay}"/>

можно считать излишним, так как см.выше — свойство Value у Slider и так по умолчанию имеет режим TwoWay.

Итого

Режим привязки в .NET MAUI можно задать в параметре Mode расширения разметки Binding. Режим привязки позволяет указать то, в каком направлении будут изменяться значения свойств источника и цели (в каком направлении будет действовать привязка).

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии