Документация по Avalonia UI
< Все темы
Печать

Привязка в шаблоне элемента управления

Когда вы создаете шаблон элемента управления и хотите привязать его к родительскому шаблону, вы можете использовать:

<TextBlock Name="tb" Text="{TemplateBinding Caption}"/>

<!-- Which is the same as -->
<TextBlock Name="tb" Text="{Binding Caption, RelativeSource={RelativeSource TemplatedParent}}"/>

Хотя два показанных здесь синтаксиса в большинстве случаев эквивалентны, между ними есть некоторые отличия:

1) TemplateBinding принимает только одно свойство, а не путь к свойству, поэтому, если вы хотите выполнить привязку с использованием пути к свойству, вы должны использовать второй синтаксис:

<!-- This WON'T work as TemplateBinding only accepts single properties -->
<TextBlock Name="tb" Text="{TemplateBinding Caption.Length}"/>

<!-- Instead this syntax must be used in this case -->
<TextBlock Name="tb" Text="{Binding Caption.Length, RelativeSource={RelativeSource TemplatedParent}}"/>

2) TemplateBinding поддерживает только режим OneWay из соображений производительности (это то же самое, что и WPF). Это означает, что TemplateBinding фактически эквивалентен {Binding RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}. Если в шаблоне элемента управления требуется двусторонняя привязка (TwoWay), необходим полный синтаксис, как показано ниже. Обратите внимание, что Binding также будет использовать режим привязки по умолчанию, в отличие от TemplateBinding.

{Binding RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}

3) TemplateBinding можно использовать только в IStyledElement.

<!-- This WON'T work as GeometryDrawing is not a IStyledElement. -->
<GeometryDrawing Brush="{TemplateBinding Foreground}"/>

<!-- Instead this syntax must be used in this case. -->
<GeometryDrawing Brush="{Binding Foreground, RelativeSource={RelativeSource TemplatedParent}}"/>

 

Оглавление