2009-04-27 5 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합니다.

"catch"에서 메시지 상자를 표시하십시오.

관련 문제