using CommunityToolkit.Mvvm.ComponentModel; using LiveCharts; using LiveCharts.Wpf; using Microsoft.Extensions.DependencyInjection; using SlnMesnac.Business; using SlnMesnac.Model.domain; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Documents; #region << 版 本 注 释 >> /*-------------------------------------------------------------------- * 版权所有 (c) 2024 WenJY 保留所有权利。 * CLR版本:4.0.30319.42000 * 机器名称:T14-GEN3-7895 * 命名空间:SlnMesnac.WPF.ViewModel * 唯一标识:9e7a55b1-ef98-4957-9a44-16dd251c4b5c * * 创建者:WenJY * 电子邮箱: * 创建时间:2024-09-18 10:46:52 * 版本:V1.0.0 * 描述: * *-------------------------------------------------------------------- * 修改人: * 时间: * 修改说明: * * 版本:V1.0.0 *--------------------------------------------------------------------*/ #endregion << 版 本 注 释 >> namespace SlnMesnac.WPF.ViewModel { public class IndexViewModel : ObservableObject { private TagScanBusiness tagScanBusiness; public IndexViewModel() { tagScanBusiness = App.ServiceProvider.GetService(); this.Init(); this.RefreshScanInfo(); } private void Init() { PassRate = 30; // 初始化数据 RecogEfficiency = new SeriesCollection { new LineSeries { Title = "Achievement", Values = new ChartValues { 3, 5, 7, 2 } // 示例数据 } }; AxisX = new ObservableCollection { "8", "12", "16", "20" }; RefreshLogMessage($"1#站台任务下发站台任务下发站台任务下发站台任务下发站台任务下发站台任务下发"); ScanItems = new ObservableCollection(); } /// /// 条码信息 /// public string _tagCode; public string TagCode { get => _tagCode; set => SetProperty(ref _tagCode, value); } /// /// 条码总数 /// public int _tagAmount; public int TagAmount { get => _tagAmount; set => SetProperty(ref _tagAmount, value); } /// /// 合格率 /// public int _passRate; public int PassRate { get => _passRate; set => SetProperty(ref _passRate, value); } /// /// 效率数值 /// private SeriesCollection _recogEfficiency; public SeriesCollection RecogEfficiency { get => _recogEfficiency; set => SetProperty(ref _recogEfficiency, value); } /// /// 效率曲线X坐标 /// private ObservableCollection _axisX; public ObservableCollection AxisX { get => _axisX; set => SetProperty(ref _axisX, value); } /// /// 图像路径 /// private string _imagePath; public string ImagePath { get => _imagePath; set => SetProperty(ref _imagePath, value); } /// /// 日志信息 /// private ObservableCollection _logMessages = new ObservableCollection(); public ObservableCollection LogMessages { get => _logMessages; set => SetProperty(ref _logMessages, value); } /// /// 扫描记录 /// private ObservableCollection _scanItems = new ObservableCollection(); public ObservableCollection ScanItems { get => _scanItems; set => SetProperty(ref _scanItems, value); } private void RefreshScanInfo() { tagScanBusiness.RefreshTagScanInfoEvent += info => { App.Current.Dispatcher.Invoke(() => { TagCode = info.Rfid; ImagePath = info.Url; string fileName = Path.GetFileName(info.Url); info.Url = fileName; ScanItems.Add(info); TagAmount++; }); }; } private ObservableCollection listItems = new ObservableCollection(); /// /// 系统运行日志输出 /// /// private async void RefreshLogMessage(string message) { await Task.Run(() => { try { string formattedMessage = $"{DateTime.Now.ToString("HH:mm:ss.ss")} ==> {message}"; lock (listItems) { listItems.Add(formattedMessage); while (listItems.Count > 120) { listItems.RemoveAt(0); } var orderedList = listItems.OrderByDescending(x => x).ToList(); // 排序后转为 List App.Current.Dispatcher.Invoke(() => { LogMessages = new ObservableCollection(orderedList); // 更新 UI }); } } catch (Exception ex) { //_logger.LogError($"日志数据绑定异常:{ex.Message}"); } }); } } }