You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

189 lines
5.7 KiB
C#

using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using SlnMesnac.Business;
using SlnMesnac.WPF.Page;
using SlnMesnac.WPF.Page.History;
using SlnMesnac.WPF.Page.Version;
using System;
using System.Windows;
namespace SlnMesnac.WPF.ViewModel
{
public class MainWindowViewModel: ViewModelBase
{
private readonly ILogger<MainWindowViewModel> _logger;
private readonly TagScanBusiness tagScanBusiness;
private IndexControl indexControl = new IndexControl();
private HistoryControl historyControl = new HistoryControl();
#region 参数定义
/// <summary>
/// RFID状态
/// </summary>
private int _RfidStatus = 0;
public int RfidStatus
{
get { return _RfidStatus; }
set { _RfidStatus = value; RaisePropertyChanged(nameof(RfidStatus)); }
}
/// <summary>
/// 相机状态
/// </summary>
private int _CamStatus = 0;
public int CamStatus
{
get { return _CamStatus; }
set { _CamStatus = value; RaisePropertyChanged(nameof(CamStatus)); }
}
public System.Windows.Controls.UserControl _content;
public System.Windows.Controls.UserControl UserContent
{
get { return _content; }
set
{
_content = value;
RaisePropertyChanged(nameof(UserContent));
}
}
#endregion
#region 事件定义
/// <summary>
/// 界面跳转按钮事件
/// </summary>
public RelayCommand<object> ControlOnClickCommand { get; set; }
/// <summary>
/// 打开系统键盘
/// </summary>
public RelayCommand OpenSystemKeyboardCommand { get; set; }
/// <summary>
/// 窗体控制
/// </summary>
public RelayCommand<object> FormControlCommand { get; set; }
#endregion
public MainWindowViewModel()
{
var sp = App.ServiceProvider;
_logger = App.ServiceProvider.GetService<ILogger<MainWindowViewModel>>();
tagScanBusiness = App.ServiceProvider.GetService<TagScanBusiness>();
ControlOnClickCommand = new RelayCommand<object>(obj => ControlOnClick(obj));
FormControlCommand = new RelayCommand<object>(x => FormControl(x));
UserContent = indexControl;
tagScanBusiness.RefreshDeviceStatusEvent += (rfid, cam) =>
{
if (rfid)
{
RfidStatus = 2;
}
else
{
RfidStatus = 1;
}
if (cam)
{
CamStatus = 2;
}
else
{
CamStatus = 1;
}
};
}
/// <summary>
/// 窗体控制
/// </summary>
/// <param name="obj"></param>
private void FormControl(object obj)
{
try
{
string controlType = obj as string;
switch (controlType)
{
// 关闭当前窗口
case "Exit":
//Environment.Exit(0);
Application.Current.Shutdown();
break;
case "Generate":
break;
// 还原 或者 最大化当前窗口
case "Normal":
if (Application.Current.MainWindow.WindowState == WindowState.Normal)
{
Application.Current.MainWindow.WindowState = WindowState.Maximized;
break;
}
if (Application.Current.MainWindow.WindowState == WindowState.Maximized)
{
Application.Current.MainWindow.WindowState = WindowState.Normal;
break;
}
break;
// 最小化当前窗口
case "Minimized":
Application.Current.MainWindow.WindowState = WindowState.Minimized;
break;
default:
break;
}
}
catch (Exception ex)
{
_logger.LogError("窗体控制逻辑异常", ex);
}
}
/// <summary>
/// 界面跳转
/// </summary>
private void ControlOnClick(object obj)
{
try
{
string info = obj as string;
switch (info)
{
case "Index":
UserContent = indexControl; break;
case "History":
UserContent = historyControl; break;
//historyControl
case "Version":
VersionInfoWindow versionInfoWindow = new VersionInfoWindow();
versionInfoWindow.Topmost = true; // 设置为最顶层
versionInfoWindow.WindowStartupLocation = WindowStartupLocation.CenterScreen; // 设置为居中
versionInfoWindow.ShowDialog();
break;
default: break;
}
}
catch (Exception ex)
{
_logger.LogError("界面跳转逻辑异常", ex);
}
}
}
}