2009-08-26 2 views
9

MVVM 스타일로 작성하려고 시도한 WPF 응용 프로그램이 있습니다. 문서가 열렸을 때처럼 예외가 발생하면 MessageBox를 표시하고 싶습니다. MessageBox.Show 호출이 ModelView에 있기 때문에 쉽게 할 수 있지만 내 코드를 제대로 느끼지 않습니다. View에 살기로되어 있다고 생각했지만 View에 코드를 삽입하지 않아도됩니다.MVVM 예외 처리

그래서 질문은 실제로 으로 내려갈 수 있습니다. MVVM에서 MessageBox를 표시하는 방법은 무엇입니까?

답변

16

사용 서비스 :

public void SomeMethodInYourViewModel() 
{ 
    try 
    { 
     DoSomethingDangerous(); 
    } 
    catch (Exception ex) 
    { 
     ServiceLocator.Resolve<IMessageService>().ShowMessage(ex.Message); 
    } 
} 

는 이제 메시지의 프리젠 테이션에서 VM을 분리했다. 표준 (못생긴) 메시지 상자를 사용하지 않기로 결정할 수도 있습니다. 그러면 VM에 영향을 미치지 않습니다.

+1

+1 : 또한 ServiceLocator를 사용하는 대신 Dependency Injection을 사용하여 필요에 따라 IMessageService를 VM에 삽입 할 수 있습니다. –

+0

프리젠 테이션 레이어와의 분리 때문에 ViewModel을 단위 테스트 할 수 있습니다. – jbe

9

Josh Smith의 탁월한 MVVM Foundation (Codeplex)을 살펴보십시오. 특히 Messenger 클래스는 서로를 인식 할 필요가없는 다양한 ViewModel 객체간에 메시지를 전달하는 가벼운 방법입니다.

또한 "보기에 코드 없음"에 대한 엄격한 규칙은 없습니다. 가능하다면 피하는 것이 가장 좋습니다 ... XAML은 간단히 작성된 .net 코드입니다 선언적 구문으로; 코드 숨김은 C# 또는 VB.net을 보완하는 것입니다 (꼭 필요한 경우)

+0

"보기 코드 없음"규칙 무시에 대한 +1. 그것은 어쨌든 더 많은 가이드 라인입니다. :) –

2

View를 바인딩 할 수있는 ViewModel 클래스에 ErrorMessage 문자열 속성을 추가하는 것이 좋습니다.