Я написал несколько приложений, для которых требуется графический интерфейс пользователя и пользовательский интерфейс winforms, подход, который я обычно применяю для реализации MVP, заключается в создании универсального интерфейса представлений (вы можете создать подкласс для более конкретных представлений) и класса controllerbaseкоторый дан вид.Затем вы можете создавать различные реализации представлений, которые наследуются от интерфейса IView (или более конкретного представления)
interface IView
{
event EventHandler Shown;
event EventHandler Closed;
void ShowView(IView parentView);
void CloseView();
}
class ControllerBase<T> where T: IView
{
private T _view;
public ControllerBase(T view)
{
_view = view;
}
public T View
{
get { return _view; }
}
public void ShowView(IView owner)
{
_view.ShowView(owner);
}
public void ShowView()
{
ShowView(null);
}
public void CloseView()
{
_view.CloseView();
}
}
Вот пример того, как это будет работать в конкретном случае
interface IPersonView: IView
{
event EventHandler OnChangeName;
string Name { get; set; }
}
class PersonController: ControllerBase<IPersonView>
{
public PersonController(string name,IPersonView view) : base(view)
{
View.Name = name;
View.OnChangeName += HandlerFunction;
}
private void HandlerFunction(object sender, EventArgs e)
{
//logic to deal with changing name here
}
}
Комуреализуйте это представление в winforms, просто убедитесь, что ваша форма наследуется от IPersonView и реализует все необходимые свойства / события, и вы готовы к работе.Чтобы создать представление / контроллер, вы должны сделать что-то вроде следующего:
PersonForm form = new PersonForm();
PersonController controller = new PersonController("jim",form);
controller.ShowView();