ShakerControlViewModel.cs 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. using Shaker.Models;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Collections.ObjectModel;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Windows.Input;
  9. namespace ShakerApp.ViewModels
  10. {
  11. public class ShakerControlViewModel : ViewModelBase<ShakerControlModel>
  12. {
  13. public override bool CanResize => false;
  14. public override double Width => 960;
  15. public override double Height => 560;
  16. public static ShakerControlViewModel Instance { get; } = new ShakerControlViewModel();
  17. static ShakerControlViewModel()
  18. {
  19. }
  20. private ShakerControlViewModel()
  21. {
  22. for (int i = 0; i < Model.ValveConfig.Count; i++)
  23. {
  24. ValveConfig.Add(new IndexValueItemViewModel<ValveConfigItemViewModel>(i + 1, new ValveConfigItemViewModel(Model.ValveConfig[i])));
  25. }
  26. GetEvent<AllConfig>().Subscrip((sender, args) =>
  27. {
  28. UpDateModel(args.Data.ShakerControl);
  29. CommunicationViewModel.Instance.LocalCommunication?.GetEvent<ShakerControlModel>()?.Subscrip((sender, args) =>
  30. {
  31. UpDateModel(args.Data);
  32. CommunicationViewModel.Instance.ServiceCommunication?.GetEvent<ShakerControlModel>()?.Publish(this, args.Data);
  33. });
  34. });
  35. }
  36. public override void UpDateModel(ShakerControlModel model)
  37. {
  38. ValveConfig.Clear();
  39. base.UpDateModel(model);
  40. for(int i=0;i<model.ValveConfig.Count;i++)
  41. {
  42. ValveConfig.Add(new IndexValueItemViewModel<ValveConfigItemViewModel>(i + 1, new ValveConfigItemViewModel(model.ValveConfig[i])));
  43. }
  44. if (model.ControlItems == null)
  45. {
  46. model.ControlItems = new List<SweepControlItemModel>();
  47. }
  48. var items = model.ControlItems.ToArray();
  49. ControlItems.Clear();
  50. if (items.Length > 0)
  51. {
  52. for (int i = 0; i < model.ControlItems.Count; i++)
  53. {
  54. ControlItems.Add(new IndexValueItemViewModel<SweepControlItemViewModel>(i + 1, new SweepControlItemViewModel(items[i])));
  55. }
  56. }
  57. }
  58. [PropertyAssociation(nameof(ShakerControlModel.PageType))]
  59. public MainPageType PageType
  60. {
  61. get => Model.PageType;
  62. set
  63. {
  64. bool changed = Model.PageType != value;
  65. SetProperty(ref Model.PageType, value);
  66. if (!changed) return;
  67. CommunicationViewModel.Instance.LocalCommunication?.GetEvent<MainPageType>()?.Publish(this, value);
  68. CommunicationViewModel.Instance.ServiceCommunication?.GetEvent<MainPageType>()?.Publish(this, value);
  69. }
  70. }
  71. [PropertyAssociation(nameof(ShakerControlModel.MaxControlItemCount))]
  72. public int MaxControlItemCount => Model.MaxControlItemCount;
  73. [PropertyAssociation(nameof(ShakerControlModel.MaxDisplacementVoltage))]
  74. public float MaxDisplacementVoltage => Model.MaxDisplacementVoltage;
  75. [PropertyAssociation(nameof(ShakerControlModel.MinDisplacementVoltage))]
  76. public float MinDisplacementVoltage => Model.MinDisplacementVoltage;
  77. [PropertyAssociation(nameof(ShakerControlModel.MaxValveVoltage))]
  78. public float MaxValveVoltage => Model.MaxValveVoltage;
  79. [PropertyAssociation(nameof(ShakerControlModel.MinValveVoltage))]
  80. public float MinValveVoltage => Model.MinValveVoltage;
  81. [PropertyAssociation(nameof(ShakerControlModel.ValvePolarity))]
  82. public Polarity ValvePolarity { get => Model.ValvePolarity; set => SetProperty(ref Model.ValvePolarity, value); }
  83. [PropertyAssociation(nameof(ShakerControlModel.SelfLoop))]
  84. public bool SelfLoop { get => Model.SelfLoop; set => SetProperty(ref Model.SelfLoop, value); }
  85. [PropertyAssociation(nameof(ShakerControlModel.Debug))]
  86. public bool Debug { get => Model.Debug; set => SetProperty(ref Model.Debug, value); }
  87. [PropertyAssociation(nameof(ShakerControlModel.DisplacementP))]
  88. public float DisplacementP { get => Model.DisplacementP; set => SetProperty(ref Model.DisplacementP, value); }
  89. [PropertyAssociation(nameof(ShakerControlModel.DisplacementI))]
  90. public float DisplacementI { get => Model.DisplacementI; set => SetProperty(ref Model.DisplacementI, value); }
  91. [PropertyAssociation(nameof(ShakerControlModel.FlutterFrequency))]
  92. public float FlutterFrequency { get => Model.FlutterFrequency; set => SetProperty(ref Model.FlutterFrequency, value); }
  93. [PropertyAssociation(nameof(ShakerControlModel.FlutterAmpt))]
  94. public float FlutterAmpt { get => Model.FlutterAmpt; set => SetProperty(ref Model.FlutterAmpt, value); }
  95. [PropertyAssociation(nameof(ShakerControlModel.ValveConfig))]
  96. public int ServoValveCount => Model.ValveConfig.Count;
  97. [PropertyAssociation(nameof(ShakerControlModel.MaxDisplacementIntegral))]
  98. public float MaxDisplacementIntegral { get => Model.MaxDisplacementIntegral; set => SetProperty(ref Model.MaxDisplacementIntegral, value); }
  99. [PropertyAssociation(nameof(ShakerControlModel.ValveConfig))]
  100. public ObservableCollection<IndexValueItemViewModel<ValveConfigItemViewModel>> ValveConfig { get; } = new ObservableCollection<IndexValueItemViewModel<ValveConfigItemViewModel>>();
  101. [PropertyAssociation(nameof(ShakerControlModel.OilStopped))]
  102. public bool OilStopped { get => Model.OilStopped; set => SetProperty(ref Model.OilStopped, value); }
  103. [PropertyAssociation(nameof(ShakerControlModel.DisplacementOpenLoop))]
  104. public bool DisplacementOpenLoop { get => Model.DisplacementOpenLoop; set => SetProperty(ref Model.DisplacementOpenLoop, value); }
  105. [PropertyAssociation(nameof(ShakerControlModel.ControlItems))]
  106. public ObservableCollection<IndexValueItemViewModel<SweepControlItemViewModel>> ControlItems { get; } = new ObservableCollection<IndexValueItemViewModel<SweepControlItemViewModel>>();
  107. [PropertyAssociation(nameof(ShakerControlModel.OutSignal))]
  108. public bool OutSignal { get => Model.OutSignal; set => SetProperty(ref Model.OutSignal, value); }
  109. [PropertyAssociation(nameof(ShakerControlModel.ControlItems))]
  110. public bool AddEnabled => ControlItems.Count < SweepFreqConfigModel.MAXITEM;
  111. [PropertyAssociation(nameof(ShakerControlModel.ControlItems))]
  112. public bool RemoveEnabled => ControlItems.Count > 0;
  113. public ICommand AddCommand => new CommunityToolkit.Mvvm.Input.RelayCommand(Add);
  114. private void Add()
  115. {
  116. if (ControlItems.Count >= MaxControlItemCount) return;
  117. SaveIsEnabled = true;
  118. Model.ControlItems.Add(new SweepControlItemModel());
  119. ControlItems.Add(new IndexValueItemViewModel<SweepControlItemViewModel>(ControlItems.Count + 1,new SweepControlItemViewModel( Model.ControlItems[^1])));
  120. }
  121. public ICommand DeleteLastCommand => new CommunityToolkit.Mvvm.Input.RelayCommand(Delete);
  122. private void Delete()
  123. {
  124. if (ControlItems.Count == 0) return;
  125. Model.ControlItems.RemoveAt(Model.ControlItems.Count - 1);
  126. ControlItems.RemoveAt(ControlItems.Count - 1);
  127. }
  128. public ICommand RefreshCommand => new CommunityToolkit.Mvvm.Input.RelayCommand(Refresh);
  129. private void Refresh()
  130. {
  131. if (ControlItems.Count == 0) return;
  132. var items = ControlItems.OrderBy(x => x.Value.Frequency).DistinctBy(x => x.Value.Frequency).Select(x => x.Value).ToList();
  133. if (items.Count == 0)
  134. {
  135. ControlItems.Clear();
  136. return;
  137. }
  138. for (int i = 0; i < items.Count; i++)
  139. {
  140. ControlItems[i].Value = items[i];
  141. }
  142. if (ControlItems.Count > items.Count)
  143. {
  144. int removecount = ControlItems.Count - items.Count;
  145. for (int i = 0; i < removecount; i++)
  146. {
  147. ControlItems.RemoveAt(items.Count);
  148. }
  149. }
  150. }
  151. protected override void Save()
  152. {
  153. base.Save();
  154. CommunicationViewModel.Instance.LocalCommunication?.GetEvent<Shaker.Models.ShakerControlModel>()?.Publish(this, Model);
  155. CommunicationViewModel.Instance.ServiceCommunication?.GetEvent<Shaker.Models.ShakerControlModel>()?.Publish(this, Model);
  156. }
  157. }
  158. }