.NET GUI 相关页面跳转方案
1. NavigationView 是 UWP,及现在winui流行的主窗口导航方式。
创建一个 NavigationView,在里面放置Frame作为右侧主要的展示窗口。
在CodeBehind中实现 NavView 的 ItemInvoked 事件。根据参数 InvokedItem (每一个Item的Content名称),或者每一Item的Tag来确定跳转。(还需处理重复跳转的情景)。
页面跳转执行:使用Frame的页面跳转方法, MainContent.Navigate(XXXPage); 窗口初始化时也需要该方法确定初始页面。
如果是WPF,不要忘记关闭 Frame 的 NavigationUIVisibility(旧时代遗老)
2. 带有 ReactiveUI 的 NavigationView
https://www.reactiveui.net/docs/handbook/routing.html
官方给出的是Routing 路由。使用一个 rxui:RoutedViewHost 来替代原始的Frame
在 View 中 ReactiveWindow
this.OneWayBind(ViewModel,
vm => vm.Router,
v => v.RoutedViewHost.Router).DisposeWith(d);
来绑定VM中的 RoutingState,订阅 NavigationView 的 SelectionChanged 事件,
页面跳转执行:ViewModel!.Router.NavigateAndReset.Execute(generalViewModel) 来做跳转。
if (parameter.args.SelectedItem is not NavigationViewItem { Tag: string tag }) { return; }
模版代码处理重复页面。
模版代码设置初始化
NavigationView.SetCurrentValue(NavigationView.SelectedItemProperty, null);
NavigationView.SetCurrentValue(NavigationView.SelectedItemProperty,
NavigationView.MenuItems.OfType<NavigationViewItem>().First());
在VM里new新建RoutingState
订阅 监控PageHader变化来设置不同的页面标题(与跳转无关)
public IScreen HostScreen => throw new NotImplementedException();
public string UrlPathSegment => PageTag.About;
在DI关联VM和View
Locator.CurrentMutable.Register(() => new AboutViewModel());
Locator.CurrentMutable.Register<IViewFor<AboutViewModel>>(() => new AboutPage());
3. Avalonia提供的MVVM跳转
Avalonia提供Loacator,视图定位器来绑定ViewModel和View,默认视图层的命名需要为XXXView,这些东西可以在Locator里高度定制。
Avalonia可以绑定Content,绑定视图。只需要在View上绑定一个Content,在ViewModel中就可以通过切换vm来切换view。这个view被定义为一个UserControl
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!