using System; using Prism.Mvvm; using System.Linq; using Prism.Regions; using Prism.Commands; using System.Windows.Controls; using System.Collections.Generic; using SHJX.Service.Common.Constants; using SHJX.Service.Common.Interface; using SHJX.Service.Control.Interface; using System.Collections.ObjectModel; namespace SHJX.Service.Shell.ViewModels.Manual { public class ManualWindowViewModel : BindableBase { #region Fields private IRegion _region; private readonly ILogService _log; private readonly IManualService _service; private readonly IRegionManager _regionManager; private Dictionary _items; #endregion #region Properties public ObservableCollection TabItemInfos { get; init; } #endregion public ManualWindowViewModel(IRegionManager regionManager, ILogService log, IManualService service) { _regionManager = regionManager; _log = log; _service = service; TabItemInfos ??= new ObservableCollection(); InitDataAndBind(); } #region Command private DelegateCommand _loginLoadingCommand; public DelegateCommand LoginLoadingCommand => _loginLoadingCommand ??= new DelegateCommand(ExecuteLoginLoadingCommand); private DelegateCommand _menuSelectionChangedCommand; public DelegateCommand MenuSelectionChangedCommand => _menuSelectionChangedCommand ??= new DelegateCommand(ExecuteMenuSelectionChangedCommand); private DelegateCommand _closingCommand; public DelegateCommand ClosingCommand => _closingCommand ??= new DelegateCommand(() => { _regionManager.Regions.Remove(RegionNames.ManualRegion);//关闭窗体之前先移除注册项 }); #endregion #region Execute void ExecuteLoginLoadingCommand() { try { _region = _regionManager.Regions[RegionNames.ManualRegion]; _region.RequestNavigate(_items.FirstOrDefault().Value); } catch (Exception ex) { _log.ErrorFormat(ex.ToString()); } } public void ExecuteMenuSelectionChangedCommand(string elementName) { try { if (_items.TryGetValue(elementName, out var value)) { _region.RequestNavigate(value); } } catch (Exception ex) { _log.ErrorFormat(ex.ToString()); } } #endregion #region Method private void InitDataAndBind() { _items = _service.ManualTabItems; foreach (string item in _items.Keys) { TabItem tab = new() { Header = item }; TabItemInfos.Add(tab); } } #endregion } }