首页 > 其他分享 >.NET GUI 相关页面跳转方案

.NET GUI 相关页面跳转方案

时间:2024-02-27 13:22:46浏览次数:29  
标签:Title GUI 跳转 PageTag NavigationView NET Strings 页面

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也需要继承自 ReactiveUserControl

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

标签:Title,GUI,跳转,PageTag,NavigationView,NET,Strings,页面
From: https://www.cnblogs.com/kimika/p/18036504

相关文章

  • 13.分布式事件总线DotNetCore.CAP的简单使用
    DotNetCore.CAP框架提供了一个简单易用的API和多种消息传输协议支持(包括Redis、RabbitMQ等),可以让用户轻松地实现消息队列、事件发布/订阅、分布式事务等功能。它还具备自动重试、异常处理、数据序列化等高级特性,可以保证消息的可靠性和一致性。使用DotNetCore.CAP框架,你可以:1.......
  • uni-app分包优化、页面预加载、页面跳转等封装
    uni-app分包优化、页面预加载、页面跳转等封装:https://blog.csdn.net/qq_44209274/article/details/115913680?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170900569616800192290740%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=1......
  • 学习unigui【20】unistringGrid
    做成下面效果图: 采用unistringGrid控件。问题:1、不同的日期区间如何得到。如:项目  开始时间时间--终止使用时间呼吸机 yyyy-mm-dd  yyyy-mm-dd呼吸机 yyyy-mm-dd  yyyy-mm-dd插管 yyyy-mm-dd  yyyy-mm-ddSELECT"器械"::VARCHAR(30)AS"......
  • 12.NET观察者模式,发布与订阅
    定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。——发布订阅模式发布订阅模式主要有两个角色:1.发布方(Publisher):也称为被观察者,当状态改变时负责通知所有订阅者。2.订阅方(Subscriber):也称为观察者,订阅事件并对接收到的......
  • delphi 提高unigui开发效率的两个方法
    1、编译时自己退出运行的程序。在做unigui开发时,每次编译运行时,unigui的应用都会在后台运行,每次重新编译时都必须手工在任务栏里将应用退出才行,非常麻烦,可以在项目编译的参数里加上杀进程的命令,这样每次重新编译时就会自动将旧的进程杀掉。命令参数如下:taskkill/f/im$(OUTPUT......
  • Advanced .Net Debugging 2:CLR基础
    一、简介这是2024新年后我的第一篇文章,也是我的《Advanced.NetDebugging》这个系列的第二篇文章。这篇文章告诉我们为了进行有效的程序调试,我们需要掌握哪些知识。言归正传,无论采取什么形式来分析问题,对被调试系统的底层了解的越多,就越有可能成功的找出问题的根源。在N......
  • 开发框架DevExpress XAF - Entity Framework Core 8支持.NET 8性能基准
    DevExpressXAF是一款强大的现代应用程序框架,允许同时开发ASP.NET和WinForms。XAF采用模块化设计,开发人员可以选择内建模块,也可以自行创建,从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。对于使用EntityFrameworkCore(EFCore)(实体核心框架)的用户来说,这是一个......
  • .net+bootstrap写的一个还不错的音乐网站
    以前做的一款设计音乐网站,分享下。技术用的是.net+sqlserver  大致的样子是这样的。1、首页如下: 2、播放歌词页面如下:歌词自动滚动,且可悬停。 3、歌单信息页面如下:详细页面如下:可删除歌单中歌曲信息。 编辑页面如下:可进行编辑封面和歌单名、简介等。 个人信息......
  • .NET周刊【2月第3期 2024-02-25】
    国内文章4.1kStar!全面的C#/.NET/.NETCore学习、工作、面试指南https://www.cnblogs.com/Can-daydayup/p/18027117DotNetGuide是一个为.NET开发者建立的技术社区和知识库。其中包含.NET相关的学习资料、工作心得、面试指南、技术文章、项目框架和常见面试题等,目的是帮助初学者......
  • [DotnetSec]XmlSerializer 反序列化 分析
    Dotnet-XmlSerializer反序列化序列化和反序列化的演示Demo参考微软的文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.xml.serialization.xmlserializer?view=net-5.0XmlSerializer命名空间:System.Xml.Serialization程序集:System.Xml.XmlSerializer.dll演示......