【问题标题】:MVP - Getting Data from the View to the PresenterMVP - 从 View 获取数据到 Presenter
【发布时间】:2016-03-03 19:46:18
【问题描述】:

我正在尝试在一个简单的 C# WinForms 应用程序中实现 MVP 模式。视图左侧是一个树形视图,其中包含应用程序保存的文件列表;视图右侧是一个 DataGridView,用于显示在树视图中单击的任何文件,或者用于输入以保存为新文件。这些文件只是使用 BinaryFormatter 写入磁盘的 Dictionary 对象。

我为视图创建了一个界面:

public interface IMappingsView
{
    event EventHandler SaveMapping;
    event EventHandler NewMapping;
    event EventHandler<DeleteArgs> DeleteMapping;
    event EventHandler PasteData;
    event EventHandler NodeClicked;
}

视图上的删除按钮具有以下点击事件处理程序:

private void buttonDeleteMapping_Click(object sender, EventArgs e)
{
    var node = treeView1.SelectedNode.Text;
    var args = new DeleteArgs(Path.Combine(RootDir,node));

    if (DeleteMapping != null)
    {
        DeleteMapping(this, args);
        dataGridView1.Rows.Clear();
        RefreshTreeView();
    }
}

将信息从视图传递给演示者的最佳方式是什么?我觉得好像每个场景都需要自定义事件参数是非常错误的。

【问题讨论】:

    标签: c# winforms mvp


    【解决方案1】:

    将您想要的数据作为属性通过接口提供。

    假设您有一个要公开的 firstName 和 lastName 字段...

    public interface IMappingsView
    {
        event EventHandler SaveMapping;
        event EventHandler NewMapping;
        event EventHandler<DeleteArgs> DeleteMapping;
        event EventHandler PasteData;
        event EventHandler NodeClicked;
        string FirstName {get;set;}
        string LastName {get;set;}
    }
    

    然后在实现接口的表单中,

    string FirstName {
        get {
            return textFirstName.Text;
        }
        set { 
            textFirstName.Text = value;
        }
    }
    

    举个例子。

    【讨论】:

    • 感谢@Dave Bush,效果很好。您将如何从 Presenter 中的 DataGridView 获取数据?
    • 相同的基本方法。使要绑定到表单和界面中的属性的数据源。模式始终相同,您需要访问的任何方法或属性都在接口中定义并在表单中实现,无论数据类型如何。
    猜你喜欢
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多