Files

184 lines
5.8 KiB
C#
Raw Permalink Normal View History

using MainShell.AlgorithmCalib.Service;
using MainShell.Hardware;
using MaxwellFramework.Core.Interfaces;
using MwFramework.Controls.Components;
using MwFramework.ManagerService;
using Stylet;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace MainShell.AlgorithmCalib.ViewModel
{
public class FusionCalibViewModel:Screen,IPage
{
private HardwareManager _hardware;
private FusionCalibMotionService _fusionCalibMotionService;
public ICommand PrevCommand { get; set; }
public ICommand NextCommand { get; set; }
private IParameterManager _parameterManager;
public string Name { get; set; } = "FusionCalib";
private bool _isInit = false;
private ObservableCollection<Screen> _Screens;
/// <summary>
/// 需要显示的界面
/// </summary>
public ObservableCollection<Screen> Screens
{
get { return _Screens; }
set
{ SetAndNotify(ref _Screens, value); }
}
private Screen _ShowScreenVM;
/// <summary>
/// 当前显示界面的VM
/// </summary>
public Screen ShowScreenVM
{
get { return _ShowScreenVM; }
set
{ SetAndNotify(ref _ShowScreenVM, value); }
}
private string _currentCalibName;
/// <summary>
/// 当前标定名称供UI标定
/// </summary>
public string CurrentCalibName
{
get { return _currentCalibName; }
set { SetAndNotify(ref _currentCalibName, value); }
}
private string _progressText;
/// <summary>
/// 进度提示
/// </summary>
public string ProgressText
{
get { return _progressText; }
set { SetAndNotify(ref _progressText, value); }
}
private int _showIndex;
/// <summary>
/// 当前显示界面的下标
/// </summary>
public int ShowIndex
{
get { return _showIndex; }
set
{ SetAndNotify(ref _showIndex, value); }
}
private bool _isEnablePrev;
/// <summary>
/// 上一个按钮是否启用
/// </summary>
public bool IsEnablePrev
{
get { return _isEnablePrev; }
set
{ SetAndNotify(ref _isEnablePrev, value); }
}
private bool _isEnableNext = true;
/// <summary>
/// 下一个按钮是否启用
/// </summary>
public bool IsEnableNext
{
get { return _isEnableNext; }
set
{ SetAndNotify(ref _isEnableNext, value); }
}
public FusionCalibViewModel(IParameterManager paraManager)
{
_hardware = IoC.Get<HardwareManager>();
_fusionCalibMotionService=IoC.Get<FusionCalibMotionService>();
this._parameterManager = paraManager;
PrevCommand = new DelegateCommand(() =>
{
OnPrev();
});
NextCommand = new DelegateCommand(() =>
{
OnNext();
});
}
protected override void OnViewLoaded()
{
base.OnViewLoaded();
if (!_isInit)
{
Screens = new ObservableCollection<Screen>();
var cameraConfigs = new List<(string Name, string FileSaveName, List<HardwareDevice> Device)>
{
("Die融合标定","topWsCameraFusion", _hardware.CameraAxisManager.TopCameraWsAxisDevices),
("Map相机融合标定","wideCameraFusion", _hardware.CameraAxisManager.WideCameraAxisDevices),
};
Screens.Add(FusionMenuCalibViewModel.Create("Pad融合标定", "topCameraFusion", _hardware.CameraAxisManager.TopCameraAxisDevices,_hardware,_fusionCalibMotionService));
foreach (var (name, fileSaveName, device) in cameraConfigs)
{
Screens.Add(CameraFusionCalibViewModel.Create(name, fileSaveName, device, _hardware, _fusionCalibMotionService));
}
// 默认显示第一个
ShowIndex = 0;
ShowScreenVM = Screens[0];
UpdateNavigationState();
_isInit = true;
}
}
public void viewUnLoad()
{
//_device.ChangeCameraMode(CameraTriggerMode.On);
//_pLCControlOperation.CyliderPress(true);
}
private void OnPrev()
{
if (ShowIndex <= 0) return;
ShowIndex--;
ShowScreenVM = Screens[ShowIndex];
UpdateNavigationState(); // ← 加上这行
}
private void OnNext()
{
if (ShowIndex >= Screens.Count - 1) return;
ShowIndex++;
ShowScreenVM = Screens[ShowIndex];
UpdateNavigationState(); // ← 加上这行
}
/// <summary>
/// 统一更新导航状态和当前相机信息
/// </summary>
private void UpdateNavigationState()
{
IsEnablePrev = ShowIndex > 0;
IsEnableNext = ShowIndex < Screens.Count - 1;
// 更新当前相机名称
if (ShowScreenVM is CameraFusionCalibViewModel camVm)
{
CurrentCalibName = camVm.CalibName;
}
if (ShowScreenVM is FusionMenuCalibViewModel Vm)
{
CurrentCalibName = Vm.CalibName;
}
// 更新进度
ProgressText = $"{ShowIndex + 1} / {Screens.Count}";
}
}
}