StockTransformWindow.xaml.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. public void Load(StockHolding holding)
  12. {
  13. OldDimensions.CopyFrom(holding.Dimensions, true);
  14. NewDimensions.CopyFrom(holding.Dimensions, true);
  15. MaxAvailable = holding.Available;
  16. OldAvailable = holding.Available;
  17. NewAvailable = holding.Available;
  18. }
  19. public void Unload(StockHolding holding)
  20. {
  21. holding.Dimensions.CopyFrom(NewDimensions, true);
  22. holding.Units = NewAvailable;
  23. }
  24. public StockDimensions OldDimensions { get; private set; }
  25. public StockDimensions NewDimensions { get; private set; }
  26. public string OldUnitSize { get; set; }
  27. public string NewUnitSize { get; set; }
  28. public double MaxAvailable { get; private set; }
  29. public double OldAvailable
  30. {
  31. get => _oldAvailable;
  32. set
  33. {
  34. if (value.Equals(_oldAvailable)) return;
  35. _oldAvailable = value;
  36. NewAvailable = value * OldDimensions.Value / NewDimensions.Value;
  37. OnPropertyChanged();
  38. }
  39. }
  40. public double NewAvailable
  41. {
  42. get => _newAvailable;
  43. set
  44. {
  45. if (value.Equals(_newAvailable)) return;
  46. _newAvailable = value;
  47. OnPropertyChanged();
  48. }
  49. }
  50. public StockTransformWindowViewModel()
  51. {
  52. OldDimensions = new StockDimensions();
  53. NewDimensions = new StockDimensions();
  54. NewDimensions.PropertyChanged += (sender, args) =>
  55. {
  56. NewAvailable = OldAvailable * OldDimensions.Value / NewDimensions.Value;
  57. OldUnitSize = OldDimensions.UnitSize;
  58. NewUnitSize = NewDimensions.UnitSize;
  59. };
  60. }
  61. public event PropertyChangedEventHandler? PropertyChanged;
  62. protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
  63. {
  64. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  65. }
  66. protected bool SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)
  67. {
  68. if (EqualityComparer<T>.Default.Equals(field, value)) return false;
  69. field = value;
  70. OnPropertyChanged(propertyName);
  71. return true;
  72. }
  73. }
  74. public partial class StockTransformWindow : Window
  75. {
  76. public StockDimensions Dimensions => _viewModel.NewDimensions;
  77. public double NewAvailable => _viewModel.NewAvailable;
  78. public double OldAvailable => _viewModel.OldAvailable;
  79. public StockTransformWindow(StockHolding holding)
  80. {
  81. InitializeComponent();
  82. _viewModel.Load(holding);
  83. }
  84. private void OK_Click(object sender, RoutedEventArgs e)
  85. {
  86. DialogResult = true;
  87. }
  88. private void Cancel_Click(object sender, RoutedEventArgs e)
  89. {
  90. DialogResult = false;
  91. }
  92. }