かなり典型的なMVP実装では、IViewインターフェイスがイベントを指定することを期待します。プレゼンターは、IViewへの参照(この場合はプレゼンターのコンストラクターにあります)を取得するときに、処理するイベントのイベントハンドラーをアタッチする必要があります。多くの場合、イベントの1つは、データをビューに配置するか、ビューをバインドするためにビューモデルに配置する必要があることをプレゼンターに通知することです。イベントは、プレゼンターがモデルの更新やプロセスの開始など、何らかのアクションを実行する必要があることを通知する場合があります。
WebFormsMvpでは、プレゼンターが(View.Modelプロパティを設定して)ビューのビューモデルにデータをロードした後、バインド構文を使用してビューをビューモデルにバインドできます。たとえば、テキストボックスコントロールは次のようになります。
<asp:textbox runat="server" DataSource="<%# Model.Data %>" />
WebFormsMvpを使用していない場合は、プレゼンターがデータをビューに渡す方法があることを確認するだけです。これを行うには、ユーザーコントロールが実装するIViewにプロパティを追加します。プロパティのセッターが呼び出されると、値を適切なコントロールに渡す必要があります。同様に、そのプロパティのゲッターが呼び出されると、そのコントロールの値を返す必要があります。
たとえば、ユーザーコントロールには、次のようなプロパティの実装を含めることができます。
string IMyView.ViewData
{
get { return TextBox1.Text; }
set { TextBox1.Text = value; }
}
ただし、凝ったものにしたい場合は、DataSourceコントロールを使用することもできます。覚えておくべき主なことは、MVPを採用している場合、ビューはプレゼンターよりもテストが難しいため、ビュー部分をできるだけシンプルに保つ必要があるということです。したがって、ビューは可能な限り実行しないようにする必要があります。値の設定、値の取得、イベントの発生など、ほとんど実行しません。要素の非表示または表示、強調表示または非強調表示などの動的ビューの動作は、IViewインターフェイスのプロパティを使用するか、プレゼンターとビューが共有するViewModelを介して、プレゼンターが制御する必要があります。
個人的には、WebFormsMvpを使用することをお勧めします。