Как реализовать usercontrol в шаблоне winforms mvp? - PullRequest
5 голосов
/ 30 сентября 2011

Я хочу реализовать шаблон MVP. У меня есть пользовательский элемент управления, который имеет некоторые текстовые поля, и когда я помещаю его в форму, я вызываю метод из usercontrol и заполняю текстовые поля. Но в шаблоне MVP я не знаю, как я могу получить доступ к usercontrol1.fill(). У вас есть пример, который может мне помочь?

Ответы [ 2 ]

4 голосов
/ 30 сентября 2011

Вот пример реализации шаблона.Ведущий знает только об интерфейсе, имеющем метод show.Presenter вызывает его, но единственная форма (он же вид) реализует способ отображения формы.

public interface IMyFormView {
    void Show();
}

public class MyForm : IMyFormView {

    public MyForm() {
        var presenter = new MyFormPresenter(this);
        presenter.Init();
    }

    public void Show() {
        usercontrol1.fill();
    }
}

public class MyFormPresenter
{
    private IMyView _view;
    public MyFormPresenter(IMyView view) {
        _view = view;
    }

    public void Init() {
        _view.Show();
    }
}

Если вам нужно передать данные в представление, вы можете передать модель представления черезShow -метод или установка пользовательских свойств в представлении.

1 голос
/ 30 сентября 2011

Если ваш пользовательский элемент управления помещен в форму и предполагается, что форма является представлением в вашем проекте, то именно это представление несет ответственность за доступ к пользовательскому элементу управления.Вы не должны получать доступ ни к какому способу управления пользователем непосредственно из докладчика.Фактически, докладчик не должен знать о существовании этих методов или даже о пользовательском контроле.Докладчик знает только о существовании представления, которое реализует существующий интерфейс для этого представления.Итак, ваше представление (форма) - это то, что будет знать и вызывать метод этого пользовательского контроля.Чтобы передать значения из презентатора для заполнения пользовательского элемента управления, размещенного в вашей форме, интерфейс, реализованный вашим представлением, должен предоставлять открытое свойство методом set (и методом get, если вы также планируете читатьэти ценности).Поскольку ваш взгляд реализует этот интерфейс, при реализации метода set этого свойства вы можете вызвать любой метод пользовательского элемента управления, так как пользовательский элемент управления включен в вашу форму, и ваша форма знает о существованиипользовательский контроль и его методы.У вас не должно возникнуть проблем с доступом к нему оттуда.

Точно так же, если вам нужно прочитать значения из пользовательского элемента управления, это должно быть сделано в представлении реализации getэто свойство.Презентатор просто читает свойство, используя метод get, определенный в интерфейсе, и представление будет знать, как получить доступ к значениям и вернуть их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...