1

うまくいけば、この画像はここで読めます...

これは、MVP を実装する私の最初のプロジェクトです。私は3つのクラスを持っています。、 という適切な名前FrmMainのメイン フォームにはFrmMainPresenterMainOpsいくつかの追加要素があります。

FrmMainでは への参照がありFrmMainPresenter、 ではFrmMainPresenterへの参照がありFrmMainます。

上のイベントは、上FrmMainのメソッドを呼び出しますFrmMainPresenter

FrmMainPresenter参照からコントロールを取得し、およびを受け入れるメソッドを呼び出すことになっいます。FrmMainMainOpsGridControlCollection<Control>

ただし、 内の適切なグリッドとコレクションにアクセスしようとすると、それらのコントロールの定義が含まれFrmMainPresenterFrmMainいないことがわかります。

コードFrmMain:

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

コードFrmMainPresenter:

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

何が間違っているのかわかりません。これが正しいとは思いませんでしたが、私の唯一の推測では、Designer ファイルで必要なコントロールを public に設定することでしたが、うまくいきませんでした。同じ結果です。

問題は、フォームのインターフェイスに gridview / controls コレクションが定義されておらず、プレゼンター クラスがそれを認識できないためだと思います。しかし、それでも、フォームに実装できるように、インターフェイスで適切に定義する方法がわかりません。

4

1 に答える 1

1

Controlデザイナ プロパティを使用してをパブリックにするかFrmMain、パブリック ゲッターをFrmMainコードに追加して、FrmMainPresenterがアクセスできるようにすることができます。

これを最終的に達成する方法はおそらく他にも 6 つほどありますが、これらはおそらく目標を達成するための最も一般的で最も簡単な 2 つの方法です。

于 2013-10-30T18:21:54.300 に答える