4

我正在为我当前的项目(Windows 应用程序)学习 MVP 模式。我在 Silverlight 和 WPF 中使用 MVVM 有很好的工作经验。在 MVVM 中,我的视图和 ViewModel 曾经位于单独的项目中,并使用它们用来相互通信的 WPF 的强绑定。但是在 MVP 中,我在 Internet 中看到的大多数示例中 View 和 Presenter 在同一个项目中。

所以我的问题是:-有什么方法可以在不同的项目中创建视图和演示者?我的意思是 View as Windows Application 和 Presenter as Class Library 项目。

如果是,那么我的视图和演示者如何相互引用。

4

1 回答 1

2

您的演示者应该只通过接口与视图进行通信。

您的演示者和视图接口可以包含在 Windows 应用程序可以引用的类库项目中。您在 Windows 应用程序项目中创建的任何具体视图都可以实现适当的视图界面。

下面的简单示例显示了类如何交互。

类库.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 回答