Как запросить представление для отображения диалога и получения результата от модели WPF / MVVM? - PullRequest
0 голосов
/ 11 марта 2019

У меня есть приложение на C # / WPF. Есть задача, выполняющая длительные операции, и ей нужен способ показать диалог, запрашивающий решение пользователя в какой-то момент. Задача не может выйти и быть перезапущена. Нужно оставаться в режиме паузы и ждать результата диалога. Есть много способов сделать это. Как мне сделать это правильно в MVVM? Как запросить взаимодействие пользователей с бизнес-логикой?

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

У меня есть отдельная 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");  
0 голосов
/ 11 марта 2019

Это сильно зависит от того, чего вы хотите достичь и как настроен ваш код.https://docs.microsoft.com/en-us/dotnet/framework/wpf/app-development/dialog-boxes-overview Это отличная статья о встроенных диалоговых окнах, поставляемых с WPF, вы также можете создать свою собственную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...