123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- using HandyControl.Interactivity.Commands;
- using OxyPlot;
- using OxyPlot.Series;
- using Shaker.ViewModel;
- using ShakerManger.Data;
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Controls;
- using System.Windows.Input;
- namespace ShakerManger.ViewModel
- {
- internal class DataMangerViewModel:DisplayViewModel<Shaker.Model.ModelBase>,IMainPageViewModel
- {
- private List<string> _PropertieNames = new List<string>()
- {
- nameof(LineSeries.Color),
- nameof(LineSeries.DataFieldX),
- nameof(LineSeries.DataFieldY),
- nameof(LineSeries.Title),
- nameof(LineSeries.StrokeThickness),
- nameof(LineSeries.MarkerSize),
- nameof(LineSeries.LineJoin),
- nameof(LineSeries.LineStyle),
- nameof(LineSeries.MarkerType),
- nameof(LineSeries.MarkerFill),
- nameof(LineSeries.MarkerStroke),
- nameof(LineSeries.MarkerStrokeThickness),
- };
- public DataMangerViewModel()
- {
- PlotModel.TextColor = OxyColors.White;
- PlotModel.TitleColor = OxyColors.White;
- PlotModel.PlotAreaBorderColor = OxyColors.White;
- PlotModel.Axes.Add(new OxyPlot.Axes.DateTimeAxis()
- {
- Title = "时间",
- Position = OxyPlot.Axes.AxisPosition.Bottom,
- Key = "X",
- MaximumPadding = 0,
- MajorGridlineColor = OxyPlot.OxyColors.Gray,
- MajorGridlineStyle = LineStyle.Dot,
- MajorGridlineThickness = 1,
- MinimumPadding = 0,
- ExtraGridlineColor = OxyPlot.OxyColors.White,
- TextColor = OxyColors.White,
- TitleColor = OxyColors.White,
- AxislineColor = OxyColors.White,
- TicklineColor = OxyColors.White,
- });
- PlotModel.Axes.Add(new OxyPlot.Axes.LinearAxis()
- {
- Title = "值",
- Position = OxyPlot.Axes.AxisPosition.Left,
- Key = "Y",
- MajorGridlineStyle = LineStyle.Dot,
- MajorGridlineColor = OxyPlot.OxyColors.Gray,
- MajorGridlineThickness = 1,
- ExtraGridlineColor = OxyPlot.OxyColors.White,
- TextColor = OxyColors.White,
- TitleColor = OxyColors.White,
- AxislineColor = OxyColors.White,
- TicklineColor = OxyColors.White,
- });
- }
- private string selectedShaker = string.Empty;
- private DateTime startTime;
- private DateTime endTime = DateTime.Now;
- public DateTime StartTime { get => startTime; set => UpdateProperty(ref startTime, value); }
- public DateTime EndTime { get => endTime; set => UpdateProperty(ref endTime, value); }
- public string SelectedShaker { get => selectedShaker; set => UpdateProperty(ref selectedShaker, value); }
- public ObservableCollection<KeyValuePair<string, string>> Shakers { get; } = new ObservableCollection<KeyValuePair<string, string>>();
- private bool isEnabled = true;
- private bool isOpen = false;
- public MainPageType MainPageType => MainPageType.DataManger;
- public ICommand SeachCommand => new DelegateCommand(Search);
- public bool IsEnabled { get => isEnabled; set => UpdateProperty(ref isEnabled, value); }
- public string IconPath { get; } = (string)App.Current.FindResource("DataMangerIcon");
- public ICommand ExportCommand => new DelegateCommand(Export);
- private void Export()
- {
- }
- private void Search()
- {
- var shaker = MainWindowViewModel.Default.Shakers.Shakers.FirstOrDefault(x => x.Model.Id == SelectedShaker);
- if(shaker==null)
- {
- PromptViewModel.Default.Init();
- PromptViewModel.Default.NoVisibility = System.Windows.Visibility.Collapsed;
- PromptViewModel.Default.Message = "找不到该振动台";
- PromptViewModel.Default.IsOpen = true;
- return;
- }
- if (StartTime > EndTime)
- {
- PromptViewModel.Default.Init();
- PromptViewModel.Default.NoVisibility = System.Windows.Visibility.Collapsed;
- return;
- }
- Datas.Clear();
- var datas = Sql.Default.Find<Shaker.Model.DataMangerItemModel>(x=>x.Time>=StartTime&&x.Time<=EndTime,name:SelectedShaker).ToList();
- if(datas ==null || datas.Count()==0)
- {
- PromptViewModel.Default.Init();
- PromptViewModel.Default.NoVisibility = System.Windows.Visibility.Collapsed;
- PromptViewModel.Default.Message = "没有找到数据";
- PromptViewModel.Default.IsOpen = true;
- return;
- }
- foreach (var data in datas)
- {
- Datas.Add(data);
- }
- PlotConfig.Clear();
- PlotModel.InvalidatePlot(false);
- PlotModel.Axes[0].Title = $"时间({datas[0].Time:yyyy-MM-dd})";
- PlotModel.Series.Clear();
- foreach(var val in shaker.PlotModel.Series.OfType<LineSeries>())
- {
- var series = new LineSeries();
- typeof(LineSeries).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)
- .Where(x => x.CanRead && x.CanWrite && _PropertieNames.Contains(x.Name))
- .ToList()
- .ForEach(x =>
- {
- x.SetValue(series, x.GetValue(val));
- });
- series.ItemsSource = Datas;
- PlotConfig.Add(new PlotConfigViewModel(series));
- PlotConfig[^1].PropertyChanged += (_, _) =>
- {
- PlotModel.InvalidatePlot(true);
- };
- PlotModel.Series.Add(series);
- }
- PlotModel.Legends.Add(new OxyPlot.Legends.Legend()
- {
- IsLegendVisible = true,
- ShowInvisibleSeries = true,
- });
- PlotModel.InvalidatePlot(true);
- OnPropertyChanged(nameof(IsConfigEnabled));
- }
- public bool IsConfigEnabled=>PlotConfig.Count>0;
- public bool IsOpen { get => isOpen; set =>UpdateProperty(ref isOpen, value); }
- public ObservableCollection<PlotConfigViewModel> PlotConfig { get; } = new ObservableCollection<PlotConfigViewModel>();
- public override Type View { get; } = typeof(View.DataRecordMangerView);
- public OxyPlot.PlotModel PlotModel { get; }= new OxyPlot.PlotModel();
- public ObservableCollection<Shaker.Model.DataMangerItemModel> Datas { get; } = new ObservableCollection<Shaker.Model.DataMangerItemModel>();
- }
- }
|