2013-10-30 108 views
1

希望這個形象是在這裏讀訪問窗體的控件...你如何使用MVP

這是我的第一個項目實施MVP。我有三堂課。我的主要形式,正確命名爲FrmMain,FrmMainPresenter,然後MainOps它有一些額外的東西。

FrmMain,我得FrmMainPresenter參考,並FrmMainPresenter我必須FrmMain參考。

FrmMain上的事件調用FrmMainPresenter上的方法。

FrmMainPresenter應該來從FrmMain基準的控制和呼叫接受一個GridControlCollection<Control>MainOps的方法。

然而,在嘗試中FrmMainPresenter訪問相應的電網和集合,它告訴我FrmMain不包含定義這些控件

守則FrmMain

private void genericCheckbox_CheckedChanged(object sender, EventArgs e) 
    { 
     _presenter.CheckBoxCheckedChanged(); 
    } 

守則FrmMainPresenter

public void CheckBoxCheckedChanged() 
    { 
     if (!_view.SuppressCheckedChanged) 
      _mo.UpdateFilter(_view.gdcSVNDefaultView, _view.Controls); 
    } 

不知道我在做什麼錯誤。我不認爲這是正確的,但我唯一的猜測是去設置文件中的公共設置必要的控制,但沒有奏效。相同的結果。

我想這個問題是因爲我的表單的界面沒有定義gridview/controls集合,我的演示者類無法看到它。但即使如此,我不確定我如何在界面中正確定義它,以便我可以在窗體上實現它。

+0

是你的問題,你的代碼沒有編譯,或者它在運行時拋出一個異常(如果是的話,異常和它的棧跟蹤是什麼)。 – elgonzo

+0

它不編譯。 – sab669

+1

如果使用接口,則聲明一個返回所需控件的方法。在你的類實現接口的時候,你也可以實現這個方法。 (或者,不要使用方法,你可以在界面中聲明一個屬性爲吸氣劑。) – elgonzo

回答

1

您可以使ControlFrmMain公衆通過設計師的屬性或一個公共的getter添加到FrmMain代碼的FrmMainPresenter可以再訪問。

可能還有另外六種方法可以最終實現,但這些可能是實現您的目標的兩種最常見和最簡單的方法。

+0

嗯,當然有效。將Getters定義添加到我的界面,然後實現類中的實際方法。我會等待一些其他答案,然後可能標記這是正確的。 – sab669

+0

@ Sab699,我認爲這是答案:)我在評論中說了同樣的效果(沒有注意到這個答案)。 – elgonzo