Avalonia如何使用ReactiveUI框架 Avalonia ReactiveUI入门

来源:这里教程网 时间:2026-02-21 17:34:13 作者:

直接上手 ReactiveUI + Avalonia,关键就三步:选对模板、装好包、写对绑定。不用从零配环境,官方模板已集成支持。

创建项目时就选ReactiveUI

用 Visual Studio 或 Rider 新建 Avalonia 项目时,在模板选择页明确勾选 “Avalonia .NET MVVM App”,下一步中 MVVM Toolkit 选项里必须选 ReactiveUI(不是 CommunityToolkit 或默认空选项)。这一步决定后续所有 ViewModel 基类、命令写法和绑定语法是否原生可用。

项目生成后,ViewModels 文件夹下自动带 MainWindowViewModel,继承的是
ReactiveUI.ViewModelBase
Views 文件夹下 MainWindow.axaml 的
x:DataType
默认指向对应 ViewModel,启用编译时绑定检查
App.axaml.cs 中已配置好 Splat 依赖注入容器,可直接注册服务

数据绑定用 RaiseAndSetIfChanged 或 [Reactive]

ReactiveUI 提供两种主流方式让属性变更自动通知 UI:

手动写:用
this.RaiseAndSetIfChanged(ref _field, value)
替代传统 INotifyPropertyChanged 实现
自动写:加
[Reactive]
特性(需引用
ReactiveUI.SourceGenerators
),编译期生成完整属性逻辑,代码更干净

例如:

[Reactive] public string? UserName { get; set; }<br>[Reactive] public bool IsLoading { get; set; }

命令绑定用 ReactiveCommand 或 [ReactiveCommand]

用户操作(如按钮点击)不直接写事件处理函数,而是暴露

ReactiveCommand
属性:

基础写法:
public ReactiveCommand<unit unit> SubmitCommand { get; }</unit>
,构造函数中用
ReactiveCommand.Create(() => { ... })
进阶写法:用
[ReactiveCommand]
特性(同样依赖 SourceGenerators),方法自动转为命令,支持 CanExecute 和执行异步逻辑
AXAML 中直接
Command="{Binding SubmitCommand}"
,无需 CommandParameter 包装

页面导航靠 Routing + ViewModel 激活

ReactiveUI 内置路由系统,适合多页应用:

主窗口 ViewModel 继承
RoutableViewModel
,声明
RoutingState
实例
子页面 ViewModel 继承
ReactiveViewModel
,并实现
IActivatableViewModel
跳转用
Router.Navigate.Execute(new DetailViewModel())
,返回用
Router.NavigateBack()
页面激活/失活逻辑(如加载数据、清理订阅)放在
WhenActivated
块里,避免内存泄漏

基本上就这些。不复杂但容易忽略的是:每次新建 ViewModel 都要确认基类是 ReactiveUI 的,而不是 Avalonia 自带的 ViewModelBase;绑定语法保持一致,别混用 CommunityToolkit 的

[ObservableProperty]
。跑通一个按钮 + 文本更新,后面就顺了。

相关推荐