Wpf 使用 Prism 实战开发Day21

配置默认首页

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

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

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

cs 复制代码
namespace MyToDo.Common
{
    /// <summary>
    /// 配置默认显示页接口
    /// </summary>
    public interface IConfigureService
    {
        void Configure();
    }
}

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

cs 复制代码
namespace MyToDo.ViewModels
{
    public class MainViewModel: BindableBase, IConfigureService
    {
        public MainViewModel(IRegionManager regionManager)
        {
            MenuBars=new ObservableCollection<MenuBar>();
            NavigateCommand = new DelegateCommand<MenuBar>(Navigate);
            this.regionManager = regionManager;
            GoBackCommand = new DelegateCommand(() =>
            {
                if(journal!=null && journal.CanGoBack) journal.GoBack();
            });
            GoForwardCommand = new DelegateCommand(() =>
            {
                if (journal != null && journal.CanGoForward) journal.GoForward();
            });
        }

        /// <summary>
        /// 导航方法
        /// </summary>
        /// <param name="bar">菜单</param>
        private void Navigate(MenuBar bar)
        {
            //命名空间为空,不进行导航
            if (bar == null || string.IsNullOrEmpty(bar.NameSpace)) return;

            regionManager.Regions[PrismManager.MainViewRegionName].RequestNavigate(bar.NameSpace, back =>
            {
                journal=back.Context.NavigationService.Journal;      
            }); 
        }
             
        /// <summary>
        /// 导航命令
        /// </summary>
        public DelegateCommand<MenuBar> NavigateCommand { get; private set; }

        /// <summary>
        /// 下一步
        /// </summary>
        public DelegateCommand GoBackCommand { get; private set; }
        /// <summary>
        /// 上一步
        /// </summary>
        public DelegateCommand GoForwardCommand { get; private set; }

        private ObservableCollection<MenuBar> menuBars;
        private readonly IRegionManager regionManager;
        /// <summary>
        /// 导航日志
        /// </summary>
        private IRegionNavigationJournal journal;
        public ObservableCollection<MenuBar> MenuBars
        {
            get { return menuBars; }
            set { menuBars = value; RaisePropertyChanged(); }
        }
        void CreateMenuBar()
        {
            MenuBars.Add(new MenuBar() { Icon="Home",Title="首页",NameSpace="IndexView"});
            MenuBars.Add(new MenuBar() { Icon = "NotebookCheckOutline", Title = "待办事项", NameSpace = "ToDoView" });
            MenuBars.Add(new MenuBar() { Icon = "NotebookPlusOutline", Title = "忘备录", NameSpace = "MemoView" });
            MenuBars.Add(new MenuBar() { Icon = "Cog", Title = "设置", NameSpace = "SettingsView" });
        }

        public void Configure()
        {
            CreateMenuBar();
            regionManager.Regions[PrismManager.MainViewRegionName].RequestNavigate("IndexView");
        }
    }
}
  • RequestNavigate 里面直接填写字符串就能该到该视图,是因为所有的视图都已在 App中进行依赖注入了。所以Prism能直接通过对应的字符串找到对应的视图。

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

cs 复制代码
       protected override void OnInitialized()
       {
           var service= App.Current.MainWindow.DataContext as IConfigureService;
           if (service != null) service.Configure();
           base.OnInitialized();
       }
相关推荐
Lingoesforstudy32 分钟前
c#中的超时终止
开发语言·笔记·c#
J-SL33 分钟前
C#接口一些有意思的东西
c#
V言微语2 小时前
2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片
开发语言·数码相机·c#
mosi3573 小时前
使用C#进行MySQL删改查操作
mysql·c#
hello-alien5 小时前
ASP.NET Core----基础学习04----Model模型的创建 & 服务的注入
学习·c#·asp.net·model
mrchip5 小时前
Simple WPF: WPF 实现按钮的长按,短按功能
c#·wpf·.net core
WineMonk6 小时前
ArcGIS Pro SDK (七)编辑 13 注解
arcgis·c#·gis·arcgis pro sdk
j.king13 小时前
开源GTKSystem.Windows.Forms框架让C# winform支持跨平台运行
linux·c#·gtk
mrchip17 小时前
Simple WPF: WPF 自定义按钮外形
c#·wpf
Lingoesforstudy20 小时前
c#的List<T>的SelectMany 和Select
c#