You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF MVVM模式下合规调用MessageBox.Show()的实现疑问

问题:Model中无法使用MVVM风格的消息框实现阻塞式输入判断

我正在开发一款应用,之前在ConnectionHandler里用下面的代码调用消息框:

if (MessageBox.Show("Question", "Window Title", 
                    MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
  // 用户点击Yes
  // 执行相关操作...
}
else
{
  // 用户点击No
  // 执行其他操作..
}

这段代码用来初始化和后端的连接,但现在知道这种直接从Model里调用视图相关的消息框不符合规范。

于是我找了方案,在MainViewModel里实现了以下代码:

public event EventHandler<MvvmMessageBoxEventArgs> MessageBoxRequest;
protected void MessageBox_Show(Action<MessageBoxResult> resultAction, string messageBoxText, string caption = "", MessageBoxButton button = MessageBoxButton.OK, MessageBoxImage icon = MessageBoxImage.None, MessageBoxResult defaultResult = MessageBoxResult.None, MessageBoxOptions options = MessageBoxOptions.None) 
{
  if (this.MessageBoxRequest != null)
  {
    this.MessageBoxRequest(this, new MvvmMessageBoxEventArgs(resultAction, messageBoxText, caption, button, icon, defaultResult, options));
  }
}

之后在View里监听这个MessageBoxRequest事件,这个方案能跑起来,但我没法在Model里像之前那样用——原来的代码是阻塞等待用户输入,拿到结果后用if做判断,但现在这个方案是用回调函数来处理结果,做不到原来那种阻塞式的逻辑。

我是新手,希望用通用的编程术语解释怎么解决这个问题,不要用MVVM专属的词汇。

内容的提问来源于stack exchange,提问作者Linus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:05:22