AppContext.partials.OverClockDataViewModels.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using NTMiner.Core;
  2. using NTMiner.Vms;
  3. using System;
  4. using System.Collections.Generic;
  5. namespace NTMiner {
  6. public partial class AppContext {
  7. public class OverClockDataViewModels : ViewModelBase {
  8. public static readonly OverClockDataViewModels Instance = new OverClockDataViewModels();
  9. private readonly Dictionary<Guid, OverClockDataViewModel> _dicById = new Dictionary<Guid, OverClockDataViewModel>();
  10. private OverClockDataViewModels() {
  11. #if DEBUG
  12. Write.Stopwatch.Start();
  13. #endif
  14. if (WpfUtil.IsInDesignMode) {
  15. return;
  16. }
  17. Init(refresh: false);
  18. BuildEventPath<OverClockDataSetInitedEvent>("超频建议集初始化后", LogEnum.DevConsole,
  19. action: message => {
  20. Init(refresh: true);
  21. });
  22. BuildEventPath<OverClockDataAddedEvent>("添加超频建议后刷新VM内存", LogEnum.DevConsole,
  23. action: message => {
  24. if (!_dicById.ContainsKey(message.Source.GetId())) {
  25. _dicById.Add(message.Source.GetId(), new OverClockDataViewModel(message.Source));
  26. if (AppContext.Instance.CoinVms.TryGetCoinVm(message.Source.CoinId, out CoinViewModel coinVm)) {
  27. coinVm.OnPropertyChanged(nameof(coinVm.OverClockDatas));
  28. }
  29. }
  30. });
  31. BuildEventPath<OverClockDataUpdatedEvent>("更新超频建议后刷新VM内存", LogEnum.DevConsole,
  32. action: message => {
  33. _dicById[message.Source.GetId()].Update(message.Source);
  34. });
  35. BuildEventPath<OverClockDataRemovedEvent>("删除超频建议后刷新VM内存", LogEnum.DevConsole,
  36. action: message => {
  37. _dicById.Remove(message.Source.GetId());
  38. if (AppContext.Instance.CoinVms.TryGetCoinVm(message.Source.CoinId, out CoinViewModel coinVm)) {
  39. coinVm.OnPropertyChanged(nameof(coinVm.OverClockDatas));
  40. }
  41. });
  42. #if DEBUG
  43. var elapsedMilliseconds = Write.Stopwatch.Stop();
  44. if (elapsedMilliseconds.ElapsedMilliseconds > NTStopwatch.ElapsedMilliseconds) {
  45. Write.DevTimeSpan($"耗时{elapsedMilliseconds} {this.GetType().Name}.ctor");
  46. }
  47. #endif
  48. }
  49. private void Init(bool refresh) {
  50. _dicById.Clear();
  51. foreach (var item in NTMinerRoot.Instance.OverClockDataSet.AsEnumerable()) {
  52. _dicById.Add(item.GetId(), new OverClockDataViewModel(item));
  53. }
  54. if (refresh) {
  55. foreach (var coinVm in AppContext.Instance.CoinVms.AllCoins) {
  56. coinVm.OnPropertyChanged(nameof(coinVm.OverClockDatas));
  57. }
  58. }
  59. }
  60. public bool TryGetMineWorkVm(Guid id, out OverClockDataViewModel minerGroupVm) {
  61. return _dicById.TryGetValue(id, out minerGroupVm);
  62. }
  63. public IEnumerable<OverClockDataViewModel> Items {
  64. get {
  65. return _dicById.Values;
  66. }
  67. }
  68. }
  69. }
  70. }