using Cognex.VisionPro.ToolBlock; using MaterialDesignThemes.Wpf; using Prism.Commands; using Prism.Events; using Prism.Ioc; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; using Team.FFFeederService; using Team.FFFeederService.Interfaces; using Team.FFFeederService.Models; using TeamAAS_VP; using TeamAAS_VP.Controls; using TeamAAS_VP.Core; using TeamAAS_VP.Enums; using TeamAAS_VP.Events; using TeamAAS_VP.Interfaces; using TeamAAS_VP.Models; using TeamAAS_VP.Models.Product; using TeamAAS_VP.Views.Product; namespace TeamAAS_VP.ViewModels.Product { public class ProcedureVisionOutputViewModel : BindableBase, IConfirmNavigationRequest { IRegionManager _regionManager; IEventAggregator _eventAggregator; IContainerProvider _container; IDialogService _dialogService; IFeederService _feederService; ISystemDatabaseService _systemDatabaseService; #region 属性 private ProductModel _SelectProduct; /// /// 选中的产品 /// public ProductModel SelectProduct { get { return _SelectProduct; } set { SetProperty(ref _SelectProduct, value); } } private ProcedureModel _SelectProcedure; /// /// 选中的流程 /// public ProcedureModel SelectProcedure { get { return _SelectProcedure; } set { SetProperty(ref _SelectProcedure, value); } } private ObservableCollection _Outputs; /// /// VM流程输出集合 /// public ObservableCollection Outputs { get { return _Outputs; } set { SetProperty(ref _Outputs, value); } } private ProcedureOutput _SelectOutput; /// /// 选中的流程输出 /// public ProcedureOutput SelectOutput { get { return _SelectOutput; } set { SetProperty(ref _SelectOutput, value); } } private ProcedureOutput _SelectOutput1; /// /// 选中的流程输出 /// public ProcedureOutput SelectOutput1 { get { return _SelectOutput1; } set { SetProperty(ref _SelectOutput1, value); } } #endregion #region 命令 private DelegateCommand _NextCommand; public DelegateCommand NextCommand => _NextCommand ?? (_NextCommand = new DelegateCommand(ExecuteNextCommand)); private DelegateCommand _BackCommand; public DelegateCommand BackCommand => _BackCommand ?? (_BackCommand = new DelegateCommand(ExecuteBackCommand)); private DelegateCommand _LoadedCommand; public DelegateCommand LoadedCommand => _LoadedCommand ?? (_LoadedCommand = new DelegateCommand(ExecuteLoadedCommand)); private DelegateCommand _AddOutputCommand; public DelegateCommand AddOutputCommand => _AddOutputCommand ?? (_AddOutputCommand = new DelegateCommand(ExecuteAddOutputCommand, () => { return SelectOutput != null ? true : false; }).ObservesProperty(()=> SelectOutput)); private DelegateCommand _RemoveOutputCommand; public DelegateCommand RemoveOutputCommand => _RemoveOutputCommand ?? (_RemoveOutputCommand = new DelegateCommand(ExecuteRemoveOutputCommand, p => { return SelectOutput1 != null ? true : false; })).ObservesProperty(() => SelectOutput1); #endregion #region 事件 #endregion public ProcedureVisionOutputViewModel(IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, IDialogService dialogService, IFeederService feederService,ISystemDatabaseService systemDatabaseService) { _regionManager = regionManager; _eventAggregator = ea; _container = container; _dialogService = dialogService; _feederService = feederService; _systemDatabaseService = systemDatabaseService; //订阅权限登录事件 _eventAggregator.GetEvent().Subscribe(LoginChange); } #region 方法 /// /// 添加输出 /// void ExecuteAddOutputCommand() { try { if (SelectOutput == null) return; if (SelectProcedure.ProcedureOutputs.FirstOrDefault(p=>p.Name== SelectOutput.Name) != null) return; if (SelectProcedure.ProcedureOutputs == null) SelectProcedure.ProcedureOutputs = new ObservableCollection(); if (SelectOutput.Name.Contains("Point")) { if (SelectProcedure.CalibrationId != Guid.Empty) { SelectOutput.IsPointTran = true; } } SelectProcedure.ProcedureOutputs.Add(SelectOutput); } catch (Exception ex) { LogHelper.WriteLogError("流程视觉输出-添加输出时出错", ex); } } /// /// 移除输出 /// void ExecuteRemoveOutputCommand(object index) { try { if ((int)index < 0) return; if (SelectProcedure.ProcedureOutputs == null) SelectProcedure.ProcedureOutputs = new ObservableCollection(); SelectProcedure.ProcedureOutputs.RemoveAt((int)index); } catch (Exception ex) { LogHelper.WriteLogError("流程视觉输出-移除输出时出错", ex); } } /// /// 下一步 /// void ExecuteNextCommand() { NavigationParameters param = new NavigationParameters(); param.Add("SelectProduct", SelectProduct); param.Add("SelectedProcedure", SelectProcedure); _regionManager.RequestNavigate("ProductRegionContext", "ProcedureParams", param); } /// /// 上一步 /// void ExecuteBackCommand() { NavigationParameters param = new NavigationParameters(); param.Add("SelectProduct", SelectProduct); param.Add("SelectedProcedure", SelectProcedure); if (SelectProcedure.FeederId == Guid.Empty) { if (SelectProcedure.VisionModel == Enums.VisionModel.Simple) { _regionManager.RequestNavigate("ProductRegionContext", "SimpleProcedure", param); } else { _regionManager.RequestNavigate("ProductRegionContext", "AdvancedProcedure", param); } } else { var Feeder = _feederService.GetFeeder(SelectProcedure.FeederId); if (Feeder.FeederBrand==FeederBrand.AFAG) { _regionManager.RequestNavigate("ProductRegionContext", "AfagFeederParams", param); } else { _regionManager.RequestNavigate("ProductRegionContext", "FeederParams", param); } } } void ExecuteLoadedCommand() { if (_systemDatabaseService.GetCurrentUser().userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } } #endregion #region 继承 /// /// 确认导航请求时调用。此方法允许您在导航之前执行一些操作。 /// /// /// public void ConfirmNavigationRequest(NavigationContext navigationContext, Action continuationCallback) { continuationCallback(true); } /// /// 接收导航请求时调用。传入导航参数,包含有关导航目标的信息。 /// /// /// public async void OnNavigatedTo(NavigationContext navigationContext) { try { SelectProduct = navigationContext.Parameters.GetValue("SelectProduct"); SelectProcedure = navigationContext.Parameters.GetValue("SelectedProcedure"); Outputs = new ObservableCollection(); if (SelectProcedure.ToolBlock!=null) { CogToolBlockTerminalCollection outputCollection = SelectProcedure.ToolBlock.Outputs; foreach (CogToolBlockTerminal output in outputCollection) { Outputs.Add(new ProcedureOutput() { Name = output.Name, ValueType = output.ValueType }); } } } catch (Exception ex) { LogHelper.WriteLogError("高级视觉界面进入时出错!", ex); } } /// /// 是否允许导航到此视图模型。 /// /// /// public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } /// /// 导航离开此视图模型时调用。您可以在此处执行清理操作或保存状态。 /// /// public void OnNavigatedFrom(NavigationContext navigationContext) { } #endregion private bool _IsAllowEdit = false; public bool IsAllowEdit { get { return _IsAllowEdit; } set { SetProperty(ref _IsAllowEdit, value); } } private void LoginChange(Models.User user) { if (user.userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } } } }