4

現在のプロジェクト (Windows アプリケーション) の MVP パターンを学習しています。Silverlight と WPF で MVVM を使用した経験があります。MVVM では、私のビューと ViewModel は別々のプロジェクトにあり、相互に通信するために使用する WPF の強力なバインディングを使用していました。しかし、MVP では、ビューとプレゼンターが同じプロジェクトにあるインターネットで見られるほとんどの例が見られます。

私の質問は次のとおりです: - 別のプロジェクトでビューとプレゼンターを作成する方法はありますか? つまり、View as Windows Application と Presenter as Class Library プロジェクトです。

はいの場合、View と Presenter がどのようにお互いを参照しているか。

4

1 に答える 1

2

プレゼンターは、インターフェイスを介してのみビューと通信する必要があります。

プレゼンターとビュー インターフェイスは、Windows アプリケーションが参照できるクラス ライブラリ プロジェクトに含めることができます。Windows アプリケーション プロジェクトで作成する具体的なビューは、適切なビュー インターフェイスを実装できます。

以下の簡単な例は、クラスがどのように相互作用するかを示しています。

ClassLibrary.dll

public class Presenter {

    // Repository class used to retrieve data
    private IRepository<Item> repository = ...;

    public void View { get; set; }

    public void LoadData() {
        // Retrieve your data from a repository or service
        IEnumerable<Item> items = repository.find(...);
        this.View.DisplayItems(items);
    }
}

public interface IView {
    void DisplayItems(IEnumerable<Item> items);
}

WindowsApplication.dll

public class ConcreteView : IView {

    private Button btn
    private Grid grid;
    private Presenter presenter = new Presenter();        

    public ConcreteView() {
        presenter.View = this;
        btn.Click += (s, a) => presenter.LoadData();
    }

    public void DisplayItems(IEnumerable<Item> items) {
        // enumerate the items and add them to your grid...
    }
}
于 2015-06-19T06:06:53.363 に答える