[ ] MVVM: (+WPF) 1 |
static class MathFuncs {
public static int GetSumOf(int a, int b) => a + b;
}
public class MainVM : INotifyPropertyChange
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName) {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
private int _number1;
public int Number1 { get {return _number1;}
set { _number1 = value;
OnPropertyChanged("Number3"); // View ,
}
}
private int _number2;
public int Number2 { get {return _number2;}
set { _number1 = value; OnPropertyChanged("Number3"); } }
// , View , Number1 Number2
public int Number3 { get; } => MathFuncs.GetSumOf(Number1, Number2);
public class MyMathModel : BindableBase
{
private readonly ObservableCollection _myValues = new ObservableCollection();
public readonly ReadOnlyObservableCollection MyPublicValues;
public MyMathModel() {
MyPublicValues = new ReadOnlyObservableCollection(_myValues);
}
//
public void AddValue(int value) {
_myValues.Add(value);
RaisePropertyChanged("Sum");
}
// ,
public void RemoveValue(int index) {
// -
if (index >= 0 && index < _myValues.Count) _myValues.RemoveAt(index);
RaisePropertyChanged("Sum");
}
public int Sum => MyPublicValues.Sum(); //
}
public class MainVM : BindableBase
{
readonly MyMathModel _model = new MyMathModel();
public MainVM()
{
// View
_model.PropertyChanged += (s, e) => { RaisePropertyChanged(e.PropertyName); };
AddCommand = new DelegateCommand(str => {
// - VM
int ival;
if (int.TryParse(str, out ival)) _model.AddValue(ival);
});
RemoveCommand = new DelegateCommand(i => {
if(i.HasValue) _model.RemoveValue(i.Value);
});
}
public DelegateCommand AddCommand { get; }
public DelegateCommand RemoveCommand { get; }
public int Sum => _model.Sum;
public ReadOnlyObservableCollection MyValues => _model.MyPublicValues;
}