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

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

Помимо привязки к DataContext элемента управления, вы также можете привязываться к другим элементам управления.

Обратите внимание, что при этом источником привязки является сам элемент управления, а не DataContext элемента управления. Если вы хотите выполнить привязку к DataContext элемента управления, вам необходимо указать это в пути привязки.

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

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

<TextBox Name="other">

<!-- Binds to the Text property of the "other" control -->
<TextBlock Text="{Binding #other.Text}"/>

Это эквивалент длинной привязки, знакомой пользователям WPF и UWP:

<TextBox Name="other">
<TextBlock Text="{Binding Text, ElementName=other}"/>

Avalonia поддерживает оба синтаксиса, но краткий синтаксис # менее многословен.

Привязка к предку

Вы можете привязаться к логическому родителю цели, используя символ $parent:

<Border Tag="Hello World!">
  <TextBlock Text="{Binding $parent.Tag}"/>
</Border>

Или к предку, добавив индексатор к символу $parent:

<Border Tag="Hello World!">
  <Border>
    <TextBlock Text="{Binding $parent[1].Tag}"/>
  </Border>
</Border>

Индексатор начинается с 0, поэтому $parent[0] эквивалентен $parent.

Вы также можете привязаться к предку по типу:

<Border Tag="Hello World!">
  <Decorator>
    <TextBlock Text="{Binding $parent[Border].Tag}"/>
  </Decorator>
</Border>

Наконец, вы можете комбинировать индексатор и тип:

<Border Tag="Hello World!">
  <Border>
    <Decorator>
    <TextBlock Text="{Binding $parent[Border;1].Tag}"/>
    </Decorator>
  </Border>
</Border>

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

<local:MyControl Tag="Hello World!">
  <Decorator>
    <TextBlock Text="{Binding $parent[local:MyControl].Tag}"/>
  </Decorator>
</local:MyControl>

Avalonia также поддерживает синтаксис RelativeSource WPF/UWP, который делает что-то похожее, но не то же самое. RelativeSource работает с визуальным деревом, тогда как приведенный здесь синтаксис работает с логическим деревом.

Оглавление