using CapMachine.Core; using CapMachine.Core.IService; using CapMachine.Wpf.Models; using CapMachine.Wpf.PrismEvent; using CapMachine.Wpf.Services; using Prism.Commands; using Prism.Events; using Prism.Regions; using System; using System.Windows; using System.Windows.Input; namespace CapMachine.Wpf.ViewModels { public class MainViewModel : NavigationViewModel { public MainViewModel(IRegionManager region, INavigationMenuService menuService, SysRunService sysService, IEventAggregator eventAggregator, ConfigService configService) { this.region = region; MenuService = menuService; SysService = sysService; EventAggregator = eventAggregator; ConfigService = configService; NavigateCommand = new DelegateCommand(Navigate); } public INavigationMenuService MenuService { get; } public SysRunService SysService { get; } public IEventAggregator EventAggregator { get; } public ConfigService ConfigService { get; } public DelegateCommand NavigateCommand { get; private set; } private int selectedIndex = -1; public int SelectedIndex { get { return selectedIndex; } set { selectedIndex = value; RaisePropertyChanged(); } } private bool isTopDrawerOpen; private readonly IRegionManager region; public bool IsTopDrawerOpen { get { return isTopDrawerOpen; } set { isTopDrawerOpen = value; if (SelectedIndex == 0 && !value) SelectedIndex = -1; RaisePropertyChanged(); } } private void Navigate(NavigationItem item) { if (item == null) return; if (item.Name.Equals("系统")) { IsTopDrawerOpen = true; return; } if (!CanNavigate(item.PageName)) { IsTopDrawerOpen = false; return; } NavigatePage(item.PageName); IsTopDrawerOpen = false; } /// /// 校验当前页面是否允许导航 /// /// 目标页面名称 /// true允许导航,false禁止导航 private bool CanNavigate(string pageName) { if (string.IsNullOrWhiteSpace(pageName)) { return false; } if (pageName.Equals("UserManageView", StringComparison.OrdinalIgnoreCase)) { return true; } if (ConfigService.IsUserLoggedIn) { return true; } MessageBox.Show("请先登录用户,再切换到其他界面!", "提示"); return false; } private DelegateCommand _TopDrawerCmd; /// /// 顶部弹窗按钮命令 /// public DelegateCommand TopDrawerCmd { set { _TopDrawerCmd = value; } get { if (_TopDrawerCmd == null) { _TopDrawerCmd = new DelegateCommand((p) => TopDrawerCmdCall(p)); } return _TopDrawerCmd; } } /// /// 弹窗数据 /// /// private void TopDrawerCmdCall(string Name) { //测试数据 IsTopDrawerOpen = false; EventAggregator.GetEvent().Publish(new ComDialogMsg() { Name = Name, Par = null }); } /// /// 导航到页面信息 /// /// private void NavigatePage(string pageName) { region.Regions["MainViewContentRegion"].RequestNavigate(pageName, back => { if (!(bool)back.Result) { System.Diagnostics.Debug.WriteLine(back.Error.Message); } }); } public override void OnNavigatedTo(NavigationContext navigationContext) { MenuService.Initialize(); //region.Regions["MainViewContentRegion"].RequestNavigate("DashboardView", back => //{ // if (!(bool)back.Result) // { // } //}); base.OnNavigatedTo(navigationContext); } } }