最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • WPF Prism框架Region失效了?

    正文概述 掘金(沙漠尽头的狼(dotnet9.com))   2021-01-07   673

    站长最近转载了痕迹的Prism 8系列博文,不知道你对该框架是否有一定了解了?不了解,可以看看本号转载的系列:

    ============================================================

    • WPF Prism框架合集(2.创建Prism应用程序)

    • WPF Prism框架合集(3.Region)

    • WPF Prism框架合集(Module)

    • WPF Prism框架合集(5.视图注入)

    以及最近本号介绍的一款使用Prism开发的开源项目:Prism for WPF 搭建一个简单的模块化开发框架

    WPF Prism框架Region失效了?

    基于Prism的WPF大屏项目

    站长15年开始使用Prism 4,去年(2020年?)也使用Prism 8做开源项目,今天分享处理Prism Region的一个问题。

    问题描述

    一般客户端项目常规操作流程是:弹出登录窗口=》账号验证成功=》关闭登录窗口=》弹出主窗口=》在主窗口作业。

    WPF Prism框架Region失效了?

    常规登录流程

    像上面的gif图主窗体,左侧是一棵树,右侧是TabControl,使用Prism模块中注入视图代码:

    public class ModuleOfLogModule : IModule {   public void RegisterTypes(IContainerRegistry containerRegistry)  {   containerRegistry.RegisterForNavigation<MainTabItemView, MainTabItemViewModel>(KEY_OF_CURRENT_MODULE);  } }
    

    主工程TabControl为模块视图显示区域:

    <TabControl prism:RegionManager.RegionName="{x:Static inf:RegionNames.MainTabRegion}" />
    

    点击左侧菜单树时,动态导航模块视图:

    private void RaiseSelectedItemHandler(CustomMenuItem menuItem){  // 此处省略N多代码  region.RequestNavigate(menuItem.Key);  // 此处省略N多代码}
    

    实际运行时发现导航没有起作用,原来的操作是登录成功,直接New的主窗体弹出,app.xaml.cs中注册的登录窗体视图:

    protected override Window CreateShell(){  return Container.Resolve<LoginView>();}
    

    百度到也有人遇到这个问题:

    1. WPF Prism框架下先登录窗体再打开主窗体

    讨论区很火,没看到想要的结果。

    1. prism – 区域管理器无法在自定义弹出窗口中找到区域

    这篇给出的答案是手动再注册区域管理器,站长没有采用。

    RegionManager.SetRegionName( theNameOfTheContentControlInsideThePopup, WellKnownRegionNames.DataFeedRegion );RegionManager.SetRegionManager( theNameOfTheContentControlInsideThePopup, theRegionManagerInstanceFromUnity );
    
    1. Prism MVVM应用 登陆后切换主窗体实现

    这个代码是将登录与主窗体做为用户控件,app.xaml.cs中注册shellview,shellview中设置一个区域,两个用户控件通过导航在这个区域切换,效果是没问题,主窗体内的区域能正常使用,但自定义的登录界面和主界面,一般标题栏啥的都不一样,这种做法比较麻烦,不推荐使用。

    看问题3类似的描述:Prism MVVM应用 登陆后切换主窗体实现

    应用场景    使用Prism7开发WPF程序,编码采用MVVM形式。当程序启动时,首先进入一个登陆界面,进行登陆认证,认证成功后转入程序布局主窗口。设计思路    WPF程序框架搭建后,程序中存一个Shell.xaml,相当于表演者的唯一舞台。登陆窗体(以下简称 LoginView)和程序布局主窗体(以下简称 MainView),分别利用IRegionManager进行管理,根据需要在不同时机相继出场表演。所有操作均由各自ViewModel(简称VM)代码完成。    1.当程序启动后,Shell通过VM,使用RegionManager的Add方法激活LoginView,(注:站长补充描述=登录验证成功,注销LoginView,再通过Add方法激活MainView)
    

    站长采用的解决方案

    baidu基本上没有找到比较合适的方案了,这个问题纠结了我几天(每天晚上搞2、3个小时,站长平时工作已经不做WPF了)。

    还好我有科学上网的方法,在YouTube上Adding a Prism Login Screen找到一个答案。

    WPF Prism框架Region失效了?

    Adding a Prism Login Screen

    解决方案的代码很简单,在app.xaml.cs中添加如下代码,在初始化shell之前(InitializeShell,shellCreateShell()注册的主窗体),先弹出登录窗口,验证成功再初始化shell(base.InitializeShell(shell)):

    protected override void InitializeShell(Window shell){  LoginView loginView = new LoginView();  if (loginView.ShowDialog() == true)  {    var shellVM = shell.DataContext as MainWindowViewModel;    shellVM.InitData();    base.InitializeShell(shell);  }  else  {    Application.Current.Shutdown(-1);  }}
    

    文末探讨

    其实该解决方案还是有问题的,在调用InitializeShell(Window shell)之前,站长调试发现模块视图已经执行了初始化,按道理说应该是登录成功后模块才执行初始化的,更多思考留给你,有什么建议欢迎Dotnet9网站留言。


    起源地下载网 » WPF Prism框架Region失效了?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元