SuperAPI AI 工具集

avalonia-mvvm

编程与开发

查看项目

更新于 11-03 16:15

技能介绍

Avalonia MVVM 是面向 Avalonia 桌面/跨平台 UI 框架的 MVVM 实现技能资料,帮助开发者在明确 Model(数据与业务)、View(.axaml)与 ViewModel(呈现逻辑与可绑定状态)职责边界的前提下组织应用代码,ViewModel 不感知 View,View 通过绑定连接 ViewModel 的属性与命令。

主要能力涵盖四种典型做法:手工实现 INotifyPropertyChanged 并在 setter 中触发 PropertyChanged;使用推荐的 CommunityToolkit.Mvvm 源生成器方案,通过 ObservableObject、[ObservableProperty]、[RelayCommand] 等特性生成属性变更通知、NameChanged 钩子与 AsyncRelayCommand,并用 NotifyCanExecuteChangedFor 联动命令可用状态;使用 ReactiveUI 的 ReactiveObject 与 RaiseAndSetIfChanged,结合 WhenAnyValue 构造 ReactiveCommand 的可用条件;以及手工编写 RelayCommand 实现 ICommand。

资料还说明了 Avalonia 版本适配:12.x 使用 ReactiveUI.Avalonia(命名空间 ReactiveUI.Avalonia),通过 UseReactiveUI(rxui => ...) 与 RegisterReactiveUIViewsFromEntryAssembly 完成初始化,并存在 UseReactiveUIWithMicrosoftDependencyResolver、WithAutofac、WithDryIoc、WithNinject 等 DI 变体;11.x 使用 Avalonia.ReactiveUI(止于 11.3.x)并以无参 UseReactiveUI() 初始化。基类包括 ReactiveWindow<TVM>、ReactiveUserControl<TVM>,路由可使用 <rxui:RoutedViewHost Router="{Binding Router}"/>。

使用方式上,资料给出 ViewLocator 模式,按 FooViewModel → FooView 的命名约定自动映射 ViewModel 到 View,并在 App.axaml 的 Application.DataTemplates 中注册;给出 ViewModel-First 导航模式,由 Router/NavigationViewModel 持有当前页面 ViewModel,通过 ContentControl 绑定 CurrentPage 展示;演示用 d:DataContext 与 d:DesignInstance 提供设计时数据;并强调列表应使用 ObservableCollection<T> 而非 List<T> 以获得增删更新。

适用场景为使用 Avalonia 构建桌面或跨平台应用、需要清晰的 MVVM 分层、可绑定状态与命令、导航、设计时预览或选择 MVVM 框架(CommunityToolkit.Mvvm、ReactiveUI、Prism、Epoxy、FuncUI、ReactiveElmish.Avalonia、Stylet.Avalonia、HanumanInstitute.MvvmDialogs、ReactiveValidation、Avalonia.Markup.Declarative、Lemon.ModuleNavigation、AsyncNavigation)的开发者。

限制与注意事项来自资料列出的常见错误:用 List<T> 替代 ObservableCollection<T> 导致列表变更不刷新;PropertyChanged 未使用准确属性名(建议 nameof());在 ViewModel 中做 UI 工作(创建控件、访问 DataContext);在 12 中于非 UI 线程创建 DispatcherTimer;异步命令未使用 AsyncRelayCommand 导致异常被吞或 UI 阻塞;在 Avalonia 12 项目误用 Avalonia.ReactiveUI;以及 CommunityToolkit ViewModel 类遗漏 partial 关键字导致源生成静默失败。具体 NuGet 版本兼容关系以资料标注为准,其余收费、平台等细节暂未提供。