首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVP: presenter如何访问视图属性?

MVP: presenter如何访问视图属性?
EN

Stack Overflow用户
提问于 2011-10-02 20:25:03
回答 1查看 1.5K关注 0票数 0

我将给出一个完整的编译示例:

代码语言:javascript
复制
using System.Windows.Forms;
interface IView {
    string Param { set; }
    bool Checked { set; }
}
class View : UserControl, IView {
    CheckBox checkBox1;
    Presenter presenter;
    public string Param {
        // SKIP THAT: I know I should raise an event here.
        set { presenter.Param = value; }
    }
    public bool Checked {
        set { checkBox1.Checked = value; }
    }
    public View() {
        presenter = new Presenter(this);
        checkBox1 = new CheckBox();
        Controls.Add(checkBox1);
    }
}
class Presenter {
    IView view;
    public string Param {
        set { view.Checked = value.Length > 5; }
    }
    public Presenter(IView view) {
        this.view = view;
    }
}
class MainClass {
    static void Main() {
        var f = new Form();
        var v = new View();
        v.Param = "long text";
        // PROBLEM: I do not want Checked to be accessible.
        v.Checked = false;
        f.Controls.Add(v);
        Application.Run(f);
    }
}

这是一个非常简单的应用程序。它有一个MVP用户控件。此用户控件具有控制其外观的公共属性Param

我的问题是我想对用户隐藏Checked属性。它应该只能由演示者访问。这有可能吗?我做了什么完全不正确的事情吗?敬请指教!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-02 20:46:29

你不能对最终用户完全隐藏它,说实话,你也不需要这样做。如果有人想要直接使用您的用户控件,则您的控件应该足够愚蠢,以便只显示在其上设置的属性,而不管这些属性是否通过presenter设置。

不过,您能做的最好的事情(如果您仍然坚持对用户隐藏这些属性),就是显式地实现IView

代码语言:javascript
复制
class View : UserControl, IView {
    CheckBox checkBox1;
    Presenter presenter;
    string IView.Param {
        // SKIP THAT: I know I should raise an event here.
        set { presenter.Param = value; }
    }
    bool IView.Checked {
        set { checkBox1.Checked = value; }
    }
    public View() {
        presenter = new Presenter(this);
        checkBox1 = new CheckBox();
        Controls.Add(checkBox1);
    }

这样,如果有人这样做了:

代码语言:javascript
复制
var ctl = new View();

他们将无法访问这些属性。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7626281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档