6

ユーザーが記事番号を検索できるメソッドがあり、データベースで利用可能な場合、記事番号はBindingListにバインドされます。ここで、記事がデータベースで利用できないかどうかをユーザーに知らせたいと思います。どうすればそれを正しい方法で行うことができますか?

メッセージerrorMessageをインターフェースメソッドに渡すだけですか?

プレゼンター:

string errorMessage;
_view.ErrorMessage(errorMessage);

意見:

public void ErrorMessage(string errorMessage)
{
      MessageBox.Show(errorMessage);
}

同じようにしますか?

4

5 に答える 5

3

イベントをバブルします。プレゼンターで、そのイベントを登録します。

public event PresenterEventHandler Message;

そして、次のように上げます。

PresenterEventArgs pe = new PresenterEventArgs("Error message", Status.Error);
this.Message(this, pe);

次に、ビューで:

protected override void OnInit(EventArgs e)
{
    this.presenter = new MyPresenter(this, MyBusinessService.Instance);
    this.presenter.Message += new PresenterEventHandler(presenter_Message);
}

void presenter_Message(object sender, PresenterEventArgs pe)
{
    // display error message
}

この方法で、エラー メッセージだけでなく、さまざまな種類のステータスをビューに戻すことができます。成功、エラー、ロック、警告、ヘルプがあります。

于 2010-01-15T17:35:37.503 に答える
1

エラーメッセージの場合、私はいくつかの基本機能を呼び出します。このようにして、左下のステータスウィンドウを更新するか、モーダルメッセージボックスを表示するかを選択できます。

プレゼンターの場合:

_windowManager.NoItemFound(errorMessage)

ウィンドウマネージャーの場合:

_statusBox.Text = errorMessage; MessageBox.Show(errorMessage);
于 2009-04-27T12:08:36.387 に答える
1

車輪を再発明するべきではありません....

モデルで例外をスローするだけです。

次に、ビューは try catch ブロックを使用して例外をキャッチします。

「キャッチ」で、メッセージ ボックスを表示します。

于 2013-02-17T09:02:58.297 に答える
1

その MVP - パッシブ ビューの場合、View インターフェイスには次のプロパティが必要です。

public interface IArticleListView {
    // more stuff here...
    bool ErrorMessageVisible { set; }
    string ErrorMessage { set; }
    // more stuff here...
    int ArticleNumber { get; }
}

public interface IPresenter {
    public void Update();
}

public class ArticleListPresenter : IPresenter {
    IViewArticleList _view;

    public ArticleListPresenter(IArticleListView view) {
        this._view = view;
        // you could update the view here or with an update method,
        // completely up to you.
    }

    // Assuming you are using a fine grained presenter
    public void HandleArticleNumberSearch() {
        bool articleNotFound;
        // search for the article ...    
        if ( articleNotFound ) {
            this._view.ErrorMessageVisible = true;
            this._view.ErrorMessage = string.Format("The article #{0} was not found.", number);
        }
    }
}

public class ArticleList : Page, IArticleListView {
    ArticleListPresenter _presenter;

    public bool ErrorMessageVisible {
        set { this.lblErrorMessage.Visible = value; }
    }

    public bool ErrorMessage {
        set { this.lblErrorMessage.Text = value; }
    }

    public int ArticleNumber {
        // You have to do some sort of validation here, but I'll keep it simple
        get { return Integer.Parse(this.txtArticleNumber.Text); }
    }

    protected override void OnInit(EventArgs e) {
        this._presenter = new ArticleListPresenter(this);
    }

    protected void Page_Load(object sender, EventArgs e) {
        // this implementation keeps the state in the View, and updates it
        // in the presenter: Passive View
        if(!this.IsPostBack) {
            this._presenter.Update();
        }
    }

    protected void OnSearchArticleButtonClick(object sender, EventArgs e) {
        this._presenter.HandleArticleNumberSearch();
    }
}
于 2012-03-02T07:23:36.963 に答える
0

それが私がすることです。

私が読んだ別の方法は、モデルがエラーを表示する方法を (おそらく ErrorMessagePresenter によって) 知ることで、エラーは元のプレゼンターから切り離されます。

私は実際にその用途を見つけていません。私にとっては、常に両方のインターフェースを実装するプレゼンターとビューで終わります。

于 2009-04-27T11:50:17.957 に答える