Как запустить всплывающую ошибку с помощью шаблона MVVM? - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу отобразить error message, когда попытка не удалась. Как лучше всего делать это с MVVM? Я использую UWP и XAML.

Этот код взят из моего ItemsViewModel :

internal async Task LoadItemsAsync()
{
    try
    {
        var items = await itemsDataAccess.GetAll("items");
        foreach (Item i in items)
            Items.Add(i);
    }
    catch (Exception ex)
    {
        //Display error to user
    }
}

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Здесь нет ни одного хорошего ответа. Один из подходов, который я использовал в прошлом, - это центральный DialogService или PopupService, который управляет созданием и отображением диалогов. Это вдвойне необходимо, потому что попытка одновременно открыть два ContentDialog в одном и том же потоке вызывает исключение (и ContentDialog является рекомендуемым способом отображения модального содержимого).

Вы можете передать этот класс Service в вашу ViewModel, в зависимости от того, что у вас есть ваши viewmodels, разрешающие зависимости, а затем просто использовать эту службу для отображения вашего всплывающего окна.

Мое предложение в двух словах:

  • Создайте свой собственный ErrorContentDialog, который наследуется от ContentDialog (или просто используйте базовый c ContentDialog, если вам этого достаточно)
  • Создайте DialogService, который управляет создание ContentDialogs (например, ограничение для одного диалогового окна на поток, упомянутое выше)
  • Напишите метод ShowErrorDialog() для DialogService. В зависимости от того, как вы хотите смоделировать ваши данные, у вас может быть несколько простых параметров, или, возможно, вы можете создать целый ErrorContentDialogViewModel, который вызывающий абонент отвечает за создание и передачу.
  • Предоставьте свой ItemsViewModel доступ к этому DialogService каким-то образом.
0 голосов
/ 07 апреля 2020

Я бы не стал слишком зацикливаться на попытке сохранить сообщение об ошибке в шаблоне MVVM.

Если это просто уведомление, используйте всплывающее окно Toast.

Если хотите фактическое взаимодействие с пользователем, то я бы перешел на модальную страницу.

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