Avalonia中如何实现等效于UpdateSourceTrigger=PropertyChanged的数据绑定?
Avalonia中实现WPF
UpdateSourceTrigger=PropertyChanged等效绑定的方法 你遇到的编译报错是因为Avalonia的{Binding}标记扩展(对应ReflectionBindingExtension类型)没有UpdateSourceTrigger属性——这个属性是WPF特有的,直接在Avalonia的XAML里使用会导致XAML解析失败。
在Avalonia中,要实现和WPF UpdateSourceTrigger=PropertyChanged(即控件值变化时立即更新绑定源)等效的效果,有以下几种方式:
1. 针对单个绑定指定更新触发事件
Avalonia使用UpdateSourceEvent属性来指定触发绑定源更新的控件事件。比如对于TextBox,要在输入文本时实时更新源,只需绑定TextChanged事件:
<TextBox Text="{Binding MyTextProperty, UpdateSourceEvent=TextChanged}" />
这样每次文本框内容变化时,都会立刻把值同步到绑定的ViewModel属性中,和WPF的UpdateSourceTrigger=PropertyChanged效果一致。
2. 使用编译绑定(CompiledBinding)
如果你用Avalonia的编译绑定{CompiledBinding},同样可以通过UpdateSourceEvent实现相同效果:
<TextBox Text="{CompiledBinding MyTextProperty, UpdateSourceEvent=TextChanged}" />
编译绑定相比普通绑定有性能优势,推荐在项目中优先使用。
3. 全局设置控件的默认更新行为
如果想让所有同类型控件(比如所有TextBox)都默认使用实时更新源的行为,可以通过样式统一设置:
<Style Selector="TextBox"> <Setter Property="Text" Value="{Binding $self.Text, UpdateSourceEvent=TextChanged}" /> </Style>
这样所有TextBox的Text绑定都会默认在TextChanged事件触发时更新源,无需逐个绑定设置。
内容的提问来源于stack exchange,提问作者Andrew Arnott
相关产品推荐
相关产品推荐

