Я читаю о MVVM для того, чтобы принять это в представлениях моих слоев презентации.В идеале я хотел бы использовать один и тот же подход для WinForms, ASP.NET и SL.
Я столкнулся с двумя различными подходами и хотел бы собрать мнения по этим (и, возможно, другим):
«Представление с интерфейсом» и где представление связано с ViewModel
«Представление с интерфейсом»
В этом подходе у нас есть интерфейс IView, который содержит: - Установить / получить свойства длятипичные значения полей - события для действий, которые происходят в представлении
Способ, которым это работает, заключается в конкретной реализации IView, внедряемой во ViewModel.Затем ViewModel связывает события
.Затем он также «выталкивает» и извлекает значения полей через свойства.Он также осведомлен о том, что происходит на View посредством
событий.Элементы управления можно активировать и деактивировать через свойства IView.
Конкретные реализации представления просты в WinForms, не уверены в других технологиях и «смешиваемости» в SL.
public interface IMyView
{
event EventHandler SomeActionClicked;
Boolean CanEditField1 { get;set; }
string Field1 { get;set; }
}
public class MyConcreteView: Form,IMyView
{
public event EventHandler SomeActionClicked;
public Boolean CanEditField1
{
get { return edtField1.Enabled; }
set { edtField1.Enabled = value; }
}
public string Field1
{
get { return edtField1.Text; }
set { edtField1.Text = value; }
}
private void btnAction_Click(object sender,EventArgs e)
{
SomeActionClicked(sender,e);
}
}
public class ViewModel
{
public ViewModel(IMyView view)
{
this.view = view;
view.SomeActionClicked += SomeActionHandler;
}
private void SomeActionHandler(object sender,EventArgs e)
{
view.CanEditField = !view.CanEditField; // Or whatever 'state' the ViewModel or Model is
view.Field1 = DateTime.Now.ToString(...);
}
private IMyView view;
}
Представление с привязкой к данным
Другой подход - это ViewModel, который имеет несколько свойств, отражающих модель (значения данных / полей, состояния элементов управления пользовательского интерфейса и т. Д.)
Затем представление использует привязку данных для «представления» объекта.Значения полей (Модель) в элементах управления пользовательского интерфейса в представлении. Модель ViewModel также управляет состояниями элементов управления
через свойства, к которым привязаны данные. Действия в представлении передаются в ViewModel через методы в
* 1027.* ViewModel, к которому подключены.
Есть ли (неочевидные) плюсы и минусы каждого из этих методов?