Для упрощения сопровождения проведите четкую грань между уровнями ответственности.
Модель, отвечающая за бизнес-логику
class Model
{
public int X { get; set; }
public int Y { get; set; }
public Model() {}
public int GetRes() => X + Y
}
ViewModel, отвечающая за подготовку данных для отображения в представлении (если требуется) и длявызов операции бизнес-логики модели, запрошенной из представления.
INotifyPropertyChanged
уведомит представление о возможных изменениях без зависимости модели представления от конкретного типа представления.
class ViewModel : INotifyPropertyChanged
{
private readonly Model _model;
public int X { get; set; }
public int Y { get; set; }
private string _result = "";
public string Result
{
get
{
return _result;
}
private set
{
if (_result.Equals(value) == false)
{
_result = value;
RaisePropertyChanged();
}
}
}
public ViewModel(Model model) => _model = model;
public void CalculateResult()
{
Result = _model.GetRes().ToString();
}
// Implementation of INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Представление, ответственность за которое заключается в отображении значений из представления моделиили вызовите операцию viewmodel, когда пользователь запрашивает.
public partial class View : Form
{
private ViewModel _viewmodel;
public View()
{
InitializeComponent();
var model = new Model { X = 10, Y = 20 }
_viewmodel = new ViewModel(model);
// Bind controls to the viewmodel
textboxForX.DataBindings.Add("Text", _viewmodel, "X", true);
textboxForY.DataBindings.Add("Text", _viewmodel, "Y", true);
labelForResult.DataBindings.Add("Text", _viewmodel, "Result", true);
}
private void CalculateButton_Click(object sender, EvetnArgs e)
{
_viewmodel.Calculate();
}
}
Обратите внимание, что в простых случаях (как указано выше) вы можете пропустить «слой» viewmodel и связать вид непосредственно с моделью.Но наличие «буфера» между представлением и бизнес-логикой облегчит вашу жизнь, когда проект начнет расти.