技能 avalonia-viewmodels-zafiro
📦

avalonia-viewmodels-zafiro

安全

使用Zafiro模式构建响应式Avalonia UI应用程序

创建可维护的Avalonia应用程序需要一致的ViewModel模式和导航结构。本技能提供经过验证的ReactiveUI和Zafiro工具包模式,用于健壮的UI开发。

支持: Claude Codex Code(CC)
🥉 74 青铜
1

下载技能 ZIP

2

在 Claude 中上传

前往 设置 → 功能 → 技能 → 上传技能

3

开启并开始使用

测试它

正在使用“avalonia-viewmodels-zafiro”。 Generate a ViewModel for a login screen with username and password fields

预期结果:

一个继承自ReactiveObject的partial类LoginViewModel,包含用于Username和Password属性的[Reactive]属性,通过ReactiveCommand.CreateFromTask创建的带有验证的LoginCommand,以及具有CompositeDisposable的适当IDisposable实现用于清理。

正在使用“avalonia-viewmodels-zafiro”。 How do I navigate from HomeViewModel to DetailsViewModel when a user clicks an item?

预期结果:

在HomeViewModel构造函数中注入INavigator,然后在选择处理程序中调用await navigator.Navigate(() => new DetailsViewModel(selectedItem))。DataTypeViewLocator会自动解析相应的DetailsView。

安全审计

安全
v1 • 2/24/2026

Static analyzer flagged 79 potential issues (71 external_commands, 8 blocker patterns). All findings are FALSE POSITIVES. The detected 'backtick execution' patterns are markdown code fence markers (```) and C# attribute syntax ([Section], [Reactive]). The 'blocker' patterns are documentation callouts ([!TIP], [!IMPORTANT]). This skill contains only documentation markdown files with C# code examples - no executable code or security risks exist.

5
已扫描文件
282
分析行数
0
发现项
1
审计总数
未发现安全问题
审计者: claude

质量评分

38
架构
100
可维护性
87
内容
50
社区
100
安全
91
规范符合性

你能构建什么

具有模块化分节的桌面应用程序

使用[Section]属性和INavigator构建一个具有自动发现分节(如Wallet、Browse和Settings)的钱包应用程序,实现视图间的无缝导航。

复杂多步骤工作流实现

使用WizardBuilder创建具有验证、进度跟踪和条件导航的项目设置向导,定义带有WhenValid和NextCommand规则的步骤。

响应式命令基础设施设置

通过HandleErrorsWith建立具有错误处理的健壮命令模式,通过CompositeDisposable自动管理一次性资源,并使用WhenAnyValue进行响应式属性观察。

试试这些提示

基本ViewModel创建
为用户个人资料屏幕创建一个ReactiveUI ViewModel,包含Name、Email和IsBusy属性。包含一个在执行前验证电子邮件格式的Save命令。使用[Reactive]属性和适当的资源清理处理。
基于分节的导航设置
向我展示如何实现具有三个分节的侧边栏导航:Dashboard、Reports和Settings。使用带有FontAwesome图标的[Section]属性,并演示如何使用IShellViewModel在分节之间切换。
带验证的多步骤向导
构建一个创建新项目的向导,包含四个步骤:Project Info、Select Template、Configure Settings和Review。每个步骤必须在继续之前进行验证。使用WizardBuilder的WhenValid规则,并展示如何处理最终结果。
带错误处理的增强命令
演示创建用于数据同步的IEnhancedCommand,通过NotificationService显示进度和处理错误,并正确清理订阅。包含取消支持以及基于连接状态的响应式启用/禁用逻辑。

最佳实践

  • 始终在订阅和命令上使用.DisposeWith(disposables)来防止响应式流中的内存泄漏
  • 使用[Section]属性标记分节ViewModel以进行自动注册,而不是在CompositionRoot中手动接线
  • 使用HandleErrorsWith扩展将命令错误传递到NotificationService以获得一致的用户反馈

避免

  • 不要在工厂方法外部使用'new'手动实例化ViewModel - 通过CompositionRoot使用依赖注入
  • 避免订阅可观察对象而不将它们添加到CompositeDisposable中 - 这会导致内存泄漏
  • 永远不要在命令执行中阻塞异步操作 - 始终使用CreateFromTask并await导航调用

常见问题

使用这些模式需要哪些依赖项?
您需要Avalonia UI、ReactiveUI、ReactiveUI.SourceGenerators和Zafiro工具包。通过NuGet包将它们添加到您的项目文件中。
自动分节发现是如何工作的?
[Section]属性将ViewModel标记为分节。Zafiro的AddSectionsFromAttributes在启动时扫描程序集,并将标记的类型注册到依赖注入容器中。
我可以在没有完整Zafiro工具包的情况下使用这些模式吗?
是的,核心ReactiveUI模式可以独立工作。但是,SlimWizard、IEnhancedCommand和分节发现需要Zafiro组件。
如何在向导步骤中处理验证?
在您的步骤ViewModel中实现验证,使用WhenAnyValue观察属性变化并设置有效性标志。在WizardBuilder中使用.WhenValid()阻止导航,直到验证通过。
ViewModels是具有可注入依赖项的普通类。使用moq或NSubstitute进行模拟,并使用ReactiveUI.Testing或直接观察属性变化来测试响应式属性。
IEnhancedCommand使用Name和Text元数据扩展ICommand用于UI绑定,加上内置的进度报告和与NotificationService的错误处理集成。