例子也绑定了自定义类,系统类同理,目前Avalonia不支持绑定结构。
BindToFont.axaml代码
<Window xmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local ="using:AvaloniaUI"xmlns:sys="clr-namespace:System;assembly=mscorlib"Height="300" Width="300"x:Class="AvaloniaUI.BindToFont"Title="BindToFont"><!--https://docs.avaloniaui.net/docs/concepts/markupextensions--><Window.Resources><FontFamily x:Key="CustomFont">Calibri</FontFamily></Window.Resources><StackPanel Margin="10" ><TextBlock Margin="5" Text="{x:Static Member=local:BindToFont.MyGuid}"></TextBlock><TextBox Name="input" >Hello Avalonia</TextBox><TextBlock Margin="5" Text="{local:BindableMe {Binding #input.Text}}"></TextBlock><TextBlock Margin="5" Text="{Binding Source={StaticResource CustomFont}, Path=Name}"></TextBlock></StackPanel> </Window>
BindToFont.axaml.cs代码
using Avalonia;
using Avalonia.Controls;
using Avalonia.Data;
using Avalonia.Data.Converters;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
using CommunityToolkit.Mvvm.ComponentModel;
using System;
using System.Linq;namespace AvaloniaUI;
public class BindableMe
{private readonly BindingBase first;public BindableMe(BindingBase first){this.first = first;}public object ProvideValue(IServiceProvider serviceProvider){/*var target = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget))!;var targetProperty = target.TargetProperty as AvaloniaProperty;var targetType = targetProperty?.PropertyType;*/var mb = new MultiBinding(){Bindings = new[] { first },Converter = new FuncMultiValueConverter<string, string>(s => $"Total Bindings: {s.Count()}, Text: " + s.ElementAt(0))};return mb;}
}
public partial class BindToFont : Window
{public static string? MyGuid{get; set;} = Guid.NewGuid().ToString();public BindToFont(){InitializeComponent();}
}
运行效果

