我有一个C#/ WPF应用程序。有一个任务需要长时间运行,它需要一种方法来显示一个对话框,要求用户在某个时候做出决定。任务无法退出并重新启动。它需要保持暂停状态并等待对话结果。有很多方法可以做到这一点。如何在MVVM中正确执行操作?如何从业务逻辑中请求用户交互?
答案 0 :(得分:0)
这在很大程度上取决于您要实现的目标以及代码的设置方式。 https://docs.microsoft.com/en-us/dotnet/framework/wpf/app-development/dialog-boxes-overview这是一篇很棒的文章,介绍了WPF附带的内置对话框,您也可以创建自己的对话框。
答案 1 :(得分:0)
我有一个单独的dll服务。里面有一个MessageBoxService
。
该服务引用一个窗口。我将实施权交给您。
我的服务实现了一个可注入的接口,虽然不是,但是以防万一。
以下是其提供的代码段:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Threading;
namespace Services.MessageBox
{
public class MessageBoxService : IMessageBoxService
{
Dispatcher dispatcher;
private Window mainWindow;
public MessageBoxService()
{
dispatcher = Application.Current.Dispatcher;
mainWindow = Application.Current.MainWindow;
}
private void UIThread(Action execute)
{
dispatcher.Invoke(execute);
}
public void Show(string caption, string message)
{
UIThread(() =>
{
System.Windows.MessageBox.Show(mainWindow, message, caption, System.Windows.MessageBoxButton.OK);
});
}
public bool? ShowDialog(string caption, string message)
{
bool? result = null;
UIThread(() =>
{
result = new Windows.Modal(message, caption).ShowDialog(mainWindow);
});
return result;
}
}
}
然后您将在ViewModel中像这样使用它:
var answer = messageBoxService.ShowDialog("Title Here", "Message to display");