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
相关产品推荐
相关产品推荐

