2010-05-21 2 views
7

MVVM 패턴의 XAML이 Messagebox를 팝업하는 데 어려움이있는 것으로 보입니다. 내 의뢰인은 유효성 확인 라벨과 색상이 적합하지 않다고 주장합니다. 그들은 여전히 ​​메시지 상자를 원합니다. 어떻게 할 수 있습니까?MVVM에서 Messagebox를 사용하는 방법?

보기 모델에서 팝업 메시지 상자를 표시 할 수 있지만보기 모델의 모든 목적을 위배합니다. 또한 오류를 발생시키고 일부 예외 처리기에서 메시지 상자를 팝업 할 수 있지만 messagebox는 예외가 아닙니다. 이는 정상적인 프로그램 흐름의 일부입니다.

XAML에서 좋은 방법이 있습니까? 제 의뢰인은 메시지 상자를 좋아해요. 그녀는 MVVM 패턴을 신경 쓰지 않고, MVVM 및 단위 테스트를 사용하기 전에 품질에 문제가 없었습니다. 하지만 지금은 그녀가 메시지 박스를 얻을조차 수 없기 때문에 그녀는별로 행복하지 않습니다.

답변

1

ViewModel에서 표시 할 메시지 상자가 처리 할 PopUpNotificationRequested 이벤트를 가질 수 있습니다. 이 방법으로 메시지 상자를 표시하는 논리는 뷰 모델에 그대로 있지만보기와 여전히 분리되어 있습니다.

+0

대단히 감사합니다. 하지만 "PopUpNotificationRequested"에 대한 Google 검색을했는데 아무 것도 얻을 수 없었습니다. 또 다른 한가지 : "PopUpNotificationRequested"를 사용하면 여전히 UI를 직접 만지고 있는데, MVVM 패턴을 위반합니까? – BigTiger

2

한 possibilty은

public interface IMessageBoxProvider 
{ 
    MessageBoxResult Show(string messageBoxText, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult); 

} 

이 인터페이스를 구현하고 일반 또는 사용자 정의 메시지 박스를 사용하는 래퍼 클래스와 같은 메시지 박스에 대한 인터페이스를 사용하는 것입니다. 는 뷰 모델에서는 다음 메시지 박스가 래퍼 클래스 인이

private IMessageBoxProvider MessageBox { get; set; } 

처럼 사용할 수 있습니다. 이제 실제 메시지 상자를 분리 했으므로 단위 테스트를 수행 할 수 있습니다.

0

몇 주 전에이 문제가 발생했습니다. 이 기사 (http://blog.roboblob.com/2010/01/19/modal-dialogs-with-mvvm-and-silverlight-4/)를 보았고 MVVM 패턴으로 모달 대화 상자를 보여주는 매우 유사한 프로세스를 본질적으로 따랐습니다. My ViewModels를 테스트하기 위해서는 mock 모달 대화 상자 서비스를 작성하기 만하면됩니다. 나는 이것이 너를 돕기를 바란다.

1

WPF Application Framework (WAF) 프로젝트의 ViewModel 샘플 응용 프로그램은 MVVM 패턴을 위반하지 않고 MessageBox를 표시하는 방법을 보여줍니다.

2

Josh Smith에는 here에 관심을 가질만한 CodeProject 기사가 있습니다.

관련 문제