StockTransformWindow.xaml.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using System.Collections.Generic;
  2. using System.ComponentModel;
  3. using System.Runtime.CompilerServices;
  4. using System.Windows;
  5. using Comal.Classes;
  6. namespace PRSDesktop;
  7. public class StockTransformWindowViewModel : INotifyPropertyChanged
  8. {
  9. private double _oldAvailable;
  10. private double _newAvailable;
  11. private string oldUnitSize;
  12. private string newUnitSize;
  13. private double maxAvailable;
  14. public void Load(StockHolding holding)
  15. {
  16. OldDimensions.CopyFrom(holding.Dimensions, true);
  17. NewDimensions.CopyFrom(holding.Dimensions, true);
  18. MaxAvailable = holding.Available;
  19. OldAvailable = holding.Available;
  20. NewAvailable = holding.Available;
  21. }
  22. public void Unload(StockHolding holding)
  23. {
  24. holding.Dimensions.CopyFrom(NewDimensions, true);
  25. holding.Units = NewAvailable;
  26. }
  27. public StockDimensions OldDimensions { get; private set; }
  28. public StockDimensions NewDimensions { get; private set; }
  29. public bool CanSave => NewDimensions.Value != 0.0 && !NewDimensions.Equals(OldDimensions);
  30. public string OldUnitSize
  31. {
  32. get => oldUnitSize;
  33. set
  34. {
  35. oldUnitSize = value;
  36. OnPropertyChanged();
  37. }
  38. }
  39. public string NewUnitSize
  40. {
  41. get => newUnitSize;
  42. set
  43. {
  44. newUnitSize = value;
  45. OnPropertyChanged();
  46. }
  47. }
  48. public double MaxAvailable
  49. {
  50. get => maxAvailable;
  51. private set
  52. {
  53. maxAvailable = value;
  54. OnPropertyChanged();
  55. }
  56. }
  57. public double OldAvailable
  58. {
  59. get => _oldAvailable;
  60. set
  61. {
  62. if (value.Equals(_oldAvailable)) return;
  63. _oldAvailable = value;
  64. if(NewDimensions.Value == 0.0)
  65. {
  66. NewAvailable = 0.0;
  67. }
  68. else
  69. {
  70. NewAvailable = value * OldDimensions.Value / NewDimensions.Value;
  71. }
  72. OnPropertyChanged();
  73. OnPropertyChanged(nameof(CanSave));
  74. }
  75. }
  76. public double NewAvailable
  77. {
  78. get => _newAvailable;
  79. set
  80. {
  81. if (value.Equals(_newAvailable)) return;
  82. _newAvailable = value;
  83. OnPropertyChanged();
  84. }
  85. }
  86. public StockTransformWindowViewModel()
  87. {
  88. OldDimensions = new StockDimensions();
  89. NewDimensions = new StockDimensions();
  90. NewDimensions.PropertyChanged += (sender, args) =>
  91. {
  92. if(NewDimensions.Value == 0.0)
  93. {
  94. NewAvailable = 0.0;
  95. }
  96. else
  97. {
  98. NewAvailable = OldAvailable * OldDimensions.Value / NewDimensions.Value;
  99. }
  100. OldUnitSize = OldDimensions.UnitSize;
  101. NewUnitSize = NewDimensions.UnitSize;
  102. OnPropertyChanged(nameof(CanSave));
  103. };
  104. }
  105. public event PropertyChangedEventHandler? PropertyChanged;
  106. protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
  107. {
  108. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  109. }
  110. protected bool SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)
  111. {
  112. if (EqualityComparer<T>.Default.Equals(field, value)) return false;
  113. field = value;
  114. OnPropertyChanged(propertyName);
  115. return true;
  116. }
  117. }
  118. public partial class StockTransformWindow : Window
  119. {
  120. public StockDimensions Dimensions => _viewModel.NewDimensions;
  121. public double NewAvailable => _viewModel.NewAvailable;
  122. public double OldAvailable => _viewModel.OldAvailable;
  123. public StockTransformWindow(StockHolding holding)
  124. {
  125. InitializeComponent();
  126. _viewModel.Load(holding);
  127. }
  128. private void OK_Click(object sender, RoutedEventArgs e)
  129. {
  130. DialogResult = true;
  131. }
  132. private void Cancel_Click(object sender, RoutedEventArgs e)
  133. {
  134. DialogResult = false;
  135. }
  136. }