2017-03-11 7 views
0

MVVMを使用するときは、ViewModelでSystem.Windows.MessageBoxを使用しないように指示されています。私たちのテストには適していないと思われます。本当ですか?Prism NotificationRequestとXceed MessageBox

Prism NotificationRequestを使用することで、ユーザーとのコミュニケーションが取れますが、単純なMessageBoxよりも少し複雑です。

もう1つの方法は、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... 
    } 
} 

今ちょうどあなたが望むサービスをバインド使用して(実行時に決定することさえできます)、テスト時にモックを注入します。