2011-09-30 94 views
3

我想實現MVP模式。我有一個用戶控件有一些文本框,當我把它放在窗體中時,我調用了一個來自usercontrol的方法並填充文本框。但在mvp模式中,我不知道如何訪問usercontrol1.fill()。你有一個可以幫助我的例子嗎?如何在winforms mvp模式中實現usercontrol?

+0

@ veronika.op:如果您有其他問題,請不要編輯此條目,而要創建一個新條目。我回滾了最新的變化。 –

回答

1

如果您的用戶控件放置在表單中,並且假設表單是項目中的視圖,那麼這個視圖有責任訪問用戶控件。您不應直接從演示者訪問任何用戶控件的方法。事實上,演示者不應該知道這些方法的存在,甚至不需要用戶控制。演示者只知道實現該視圖的現有接口的視圖的存在。 因此,您的視圖(表單)將會知道並調用此用戶控件的方法。要傳遞演示者的值以填充放置在表單中的用戶控件,由視圖實現的界面應該使用set方法公開屬性(如果您計劃還要讀取這些值,則使用get方法)。 由於您的視圖正在實現此界面,因此在執行此屬性的set方法時,您可以在那裏調用用戶控件的任何方法,因爲用戶控件包含在您的表單中,並且表單知道用戶的存在控制及其方法。你不應該從那裏訪問它有任何問題。

以同樣的方式,如果您需要從用戶控件讀取值,則應該在視圖中執行此屬性的get實現。演示者只需使用界面中定義的get方法讀取屬性,視圖就會知道如何訪問這些值並將其返回。

2

這是模式的示例實現。演示者只知道具有show方法的接口。 Presenter稱它,但唯一的窗體(又名View)實現瞭如何顯示窗體。

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 - 方法或設置自定義屬性通過視圖模型。

+0

謝謝,但我不明白我怎麼可以訪問我的usercontrol.i的方法不要問題發送parameter.my問題是我怎麼能寫myu​​sercontrol.fill()(填充是我的方法名稱)? –

+0

我改變了相應的代碼。現在,演示者調用'_view.Show()',然後填充您的控件。 –