2017-03-11 1 views
0

우리는 MVVM을 사용할 때 ViewModel에서 System.Windows.MessageBox를 사용하지 않는 것을 말합니다. 우리 테스트에는 좋지 않기 때문입니다. 사실입니까?프리즘 NotificationRequest 대 Xceed MessageBox

Prism NotificationRequest를 사용하면 사용자와 연락 할 수 있지만 단순한 MessageBox보다 약간 복잡합니다.

또 다른 방법은 Prism NotificationRequest보다 단순한 Xceed Wpf Toolkit MessageBox를 사용하는 것입니다.

내 질문은 : 둘 다 동일합니까? MVVM 방식으로 사용할 수 있습니까? 아니요, NotificationRequest를 사용해야하는시기는 언제이며 Xceed MessageBox는 언제 사용할 수 있습니까? 당신이 테스트 할 때 모의로 대체 할 수있는 서비스에서 MessageBox.Show()를 호출하면

은 괜찮아요, 당신에게

답변

0

감사드립니다. 결국

은, 당신이 원하지 않는 것은보기 모델 단위 테스트를 실행할 때 팝업 메시지 상자입니다 ...

예 :

public interface IMessageBoxService 
{ 
    ClickedButten ShowMessageBox(string message, Buttons buttons); 
} 

internal class SomeViewModel 
{ 
    public SomeViewModel(IMessageBoxService messageBoxService) 
    { 
     _messageBoxService = messageBoxService; 
    } 

    public void SomeMethodThatNeedsAMessageBox() 
    { 
     var theClickedButton = _messageBoxService.ShowMessageBox("Click me!", Buttons.Ok | Buttons.Cancel); 
     // react to the click... 
    } 
} 

internal class SystemMessageBoxService : IMessageBoxService 
{ 
    public ClickedButten ShowMessageBox(string message, Buttons buttons) 
    { 
     // adapt parameters... 
     MessageBox.Show(...); 
     // adapt result... 
    } 
} 

internal class XceedMessageBoxService : IMessageBoxService 
{ 
    public ClickedButten ShowMessageBox(string message, Buttons buttons) 
    { 
     // adapt parameters... 
     Xceed.ShowMessageBox(...); 
     // adapt result... 
    } 
} 

이제 당신이 원하는 서비스를 결합 사용 (심지어 런타임에 결정될 수 있음) 및 테스트시 모의 (mock) 삽입