Avalonia中推荐使用基于ViewModel的导航:通过ContentControl绑定CurrentPage属性,配合DataTemplate实现自动视图渲染;支持手动切换、导航栈及参数传递等进阶功能。
Avalonia 中没有内置的 NavigationService(不像 WPF 的 Frame 或 UWP 的 Frame),但可以通过 ContentControl + 数据绑定 + ViewModel 导航模式,实现简洁、可测试、符合 MVVM 的页面导航。核心思路是:用一个主视图容器(如 ContentControl)显示当前页面,通过切换其 Content 绑定的 ViewModel(或 UserControl),驱动界面变化。
这是最符合 Avalonia 和 MVVM 理念的方式:导航逻辑写在 ViewModel 层,View 仅负责展示。
MainWindowViewModel),包含一个 CurrentPage 属性(类型为 INotifyPropertyChanged 的基类或接口,如 INavigationPage)ContentControl 的 Content 绑定到 CurrentPage
HomeViewModel、SettingsViewModel),并配套对应 UserControl(如 HomeView.axaml)DataTemplates 在 App.axaml 或主视图中注册 ViewModel → View 映射,Avalonia 会自动选择对应视图渲染示例(App.axaml 中注册):
适合简单应用或原型开发,不依赖复杂导航栈管理。
ContentControl,并绑定到一个可变的 object 或 Control 类型属性
wModel 或代码后台中,直接 new 页面控件(如 new HomeView())并赋值给该属性XAML 示例:
若需类似浏览器的导航历史,可封装一个 NavigationService 类:
Stack 或 Stack 记录历史GoTo() 、GoBack()、GoForward() 方法CurrentPage 并触发通知,ContentControl 自动刷新IoC(如 Splat)解析页面 ViewModel,确保依赖注入生效IDisposable 或 OnDetachedFromVisualTree 中清理INavigationParameter 接口,由导航服务注入Transitions,可在 ContentControl 上设置 ContentTransition 实现淡入/滑动效果PageViewModelBase),便于统一生命周期管理