Prism NotificationRequest 与 Xceed MessageBox

Prism NotificationRequest vs Xceed MessageBox

当我们使用 MVVM 时,我们被告知要避免在我们的 ViewModel 中使用 System.Windows.MessageBox,我想这是因为它不利于我们的测试。是真的吗?

使用 Prism NotificationRequest,我们可以与用户进行交流,但它比简单的 MessageBox 稍微复杂一些。

另一种方法是使用 Xceed Wpf Toolkit MessageBox,它比 Prism NotificationRequest 更简单。

我的问题是:它们是等价的吗?我们可以以 MVVM 的方式使用它们中的任何一个吗?如果NO,什么时候需要使用NotificationRequest,什么时候可以使用Xceed MessageBox?

谢谢

如果您从可以在测试时用模拟替换的服务调用 MessageBox.Show(),就没问题。

毕竟,您不希望在 运行 您的视图模型单元测试时弹出消息框...

示例:

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...
    }
}

现在只需绑定您要使用的服务(甚至可以在运行时决定),并在测试时注入模拟。