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变化来设置不同的页面标题(与跳转无关)
Router.CurrentViewModel .WhereNotNull() .Select(x => x.UrlPathSegment) .WhereNotNull() .Subscribe(x => PageHeader = x switch { PageTag.General => Strings.GeneralPage_Title, PageTag.MeCab => Strings.MeCabPage_Title, PageTag.TTS => Strings.TTSPage_Title, PageTag.Trans => Strings.TransPage_Title, PageTag.About => Strings.About_Title, _ => string.Empty }).DisposeWith(_disposables); 在具体页面的VM里设制 IScreen,VM需要继承这些接口 ReactiveObject, IRoutableViewModel, IActivatableViewModel。 view也需要继承自 ReactiveUserControlpublic 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
标签:Title,GUI,跳转,PageTag,NavigationView,NET,Strings,页面 From: https://www.cnblogs.com/kimika/p/18036504