Привязка к элементам управления
Помимо привязки к 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
работает с визуальным деревом, тогда как приведенный здесь синтаксис работает с логическим деревом.