2009-04-27 27 views
5

私は、ユーザーが記事番号を検索し、データベースで利用可能な場合、articlenumberがBindingListにバインドされる方法があります。今私は記事がデータベースで利用できないかどうかをユーザーに知らせたいと思う。どのように私はそれを正しい方法で行うのですか?(MVPパターン)エラーメッセージをPresenterからViewに転送する方法は?

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

プレゼンター:

string errorMessage; 
_view.ErrorMessage(errorMessage); 

ビュー:

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

あなたはそれを同じように行いますか?

答えて

0

これは私が行うことです。

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

私は実際にそれを使用していませんでした。私にとって、それは常にプレゼンターで終わり、両方のインターフェースを実装しています。

1

エラーメッセージの場合は、基本機能をいくつか呼び出します。この方法で、左下のステータスウィンドウを更新したり、モーダルメッセージボックスを表示したりすることができます。ウィンドウマネージャで

_windowManager.NoItemFound(errorMessage) 

_statusBox.Text = errorMessage; MessageBox.Show(errorMessage); 
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 
} 

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

+0

最近、私はこれに類似したことをしました。エラーと警告のイベント(これらはCancelEventArgsが使用されました)がクライアントからのフィードバックにあった – Kevin

1

そのMVP場合 - パッシブビューは、[表示インタフェースは読むことができた財産れている必要があります。

public interface IViewArticleList { 
    // 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(IViewArticleList 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; 
     // whatever, whatever...  
     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(); 
    } 
} 
1

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

をあなたは単に投げる必要がありますあなたのモデルの例外です。

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

"catch"にメッセージボックスを表示します。

関連する問題