为了让Avalonia知晓视图模型中的属性已经发生了变化,视图模型必须要实现变化通知。最简单的方法是使你的视图模型类继承ReactiveUI中的ReactiveObject。
ReactiveUI
ReactiveObject
然后在属性的setter中调用RaiseAndSetIfChanged:
RaiseAndSetIfChanged
using ReactiveUI; public class MyViewModel : ReactiveObject { private string caption; public string Caption { get => caption; set => this.RaiseAndSetIfChanged(ref caption, value); } }
详情请参考ReactiveUI文档arrow-up-right.
如果你不想引入对ReactiveUI的依赖,可以自己手动实现INotifyPropertyChangedarrow-up-right.
INotifyPropertyChanged
集合也需要实现变化通知。这里有一些开箱即用的集合类:
ObservableCollectionarrow-up-right 在.NET的基础类库中
DynamicDataarrow-up-right 可以用在更加高级的场景
ReactiveListarrow-up-right 在ReactiveUI中 (已被DynamicData淘汰)
Avalonia中搭载了AvaloniaList,但API在未来可能会更新,当下不建议使用
AvaloniaList
如果你想要自己实现集合变化通知,你可以手动实现INotifyCollectionChangedarrow-up-right
INotifyCollectionChanged
最后更新于3年前