当前位置:   article > 正文

Wpf 使用 Prism 实战开发Day21

Wpf 使用 Prism 实战开发Day21

配置默认首页

应用程序启动时,默认显示首页

一.实现思路,通过自定义接口来配置应用程序加载完成时,设置默认显示页

步骤1.创建自定义 IConfigureService 接口

  1. namespace MyToDo.Common
  2. {
  3. /// <summary>
  4. /// 配置默认显示页接口
  5. /// </summary>
  6. public interface IConfigureService
  7. {
  8. void Configure();
  9. }
  10. }

步骤2.MainViewModel 去继承并实现该接口。同时把初始化菜单操作,以及配置默认启动页操作在该方法中去处理。

  1. namespace MyToDo.ViewModels
  2. {
  3. public class MainViewModel: BindableBase, IConfigureService
  4. {
  5. public MainViewModel(IRegionManager regionManager)
  6. {
  7. MenuBars=new ObservableCollection<MenuBar>();
  8. NavigateCommand = new DelegateCommand<MenuBar>(Navigate);
  9. this.regionManager = regionManager;
  10. GoBackCommand = new DelegateCommand(() =>
  11. {
  12. if(journal!=null && journal.CanGoBack) journal.GoBack();
  13. });
  14. GoForwardCommand = new DelegateCommand(() =>
  15. {
  16. if (journal != null && journal.CanGoForward) journal.GoForward();
  17. });
  18. }
  19. /// <summary>
  20. /// 导航方法
  21. /// </summary>
  22. /// <param name="bar">菜单</param>
  23. private void Navigate(MenuBar bar)
  24. {
  25. //命名空间为空,不进行导航
  26. if (bar == null || string.IsNullOrEmpty(bar.NameSpace)) return;
  27. regionManager.Regions[PrismManager.MainViewRegionName].RequestNavigate(bar.NameSpace, back =>
  28. {
  29. journal=back.Context.NavigationService.Journal;
  30. });
  31. }
  32. /// <summary>
  33. /// 导航命令
  34. /// </summary>
  35. public DelegateCommand<MenuBar> NavigateCommand { get; private set; }
  36. /// <summary>
  37. /// 下一步
  38. /// </summary>
  39. public DelegateCommand GoBackCommand { get; private set; }
  40. /// <summary>
  41. /// 上一步
  42. /// </summary>
  43. public DelegateCommand GoForwardCommand { get; private set; }
  44. private ObservableCollection<MenuBar> menuBars;
  45. private readonly IRegionManager regionManager;
  46. /// <summary>
  47. /// 导航日志
  48. /// </summary>
  49. private IRegionNavigationJournal journal;
  50. public ObservableCollection<MenuBar> MenuBars
  51. {
  52. get { return menuBars; }
  53. set { menuBars = value; RaisePropertyChanged(); }
  54. }
  55. void CreateMenuBar()
  56. {
  57. MenuBars.Add(new MenuBar() { Icon="Home",Title="首页",NameSpace="IndexView"});
  58. MenuBars.Add(new MenuBar() { Icon = "NotebookCheckOutline", Title = "待办事项", NameSpace = "ToDoView" });
  59. MenuBars.Add(new MenuBar() { Icon = "NotebookPlusOutline", Title = "忘备录", NameSpace = "MemoView" });
  60. MenuBars.Add(new MenuBar() { Icon = "Cog", Title = "设置", NameSpace = "SettingsView" });
  61. }
  62. public void Configure()
  63. {
  64. CreateMenuBar();
  65. regionManager.Regions[PrismManager.MainViewRegionName].RequestNavigate("IndexView");
  66. }
  67. }
  68. }
  • RequestNavigate 里面直接填写字符串就能该到该视图,是因为所有的视图都已在 App中进行依赖注入了。所以Prism能直接通过对应的字符串找到对应的视图。

步骤3.在 App中,当应用程序主窗口加载完成的时候,通过重写OnInitialized 方法,在该方法中通过拿到主窗口实例,去调用到自定义的方法来实现加载设置的默认首页。

  1. protected override void OnInitialized()
  2. {
  3. var service= App.Current.MainWindow.DataContext as IConfigureService;
  4. if (service != null) service.Configure();
  5. base.OnInitialized();
  6. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/493422
推荐阅读
相关标签
  

闽ICP备14008679号