Рекомендовать способ вызова UWP MessageDialog в App.xaml.cs - PullRequest
0 голосов
/ 13 июня 2018

У меня есть MessageDialog с одной кнопкой в ​​моем App.xaml.cs. Я хочу использовать его на других страницах.Кажется, что работает несколько подходов, но поскольку есть некоторые тонкости с асинхронностью, а задачи - это какой-то конкретный, правильный?1007 *:

public async Task mymessagebox(string the_message)
{
   MessageDialog messagedialog=new MessageDialog(the_message);
   await messagedialog.ShowAsync();
}

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Я думаю, что рекомендуемый способ сделать это - создать клиентский диалог или службу сообщений, которая реализует интерфейс:

public interface IDialogService
{
    Task ShowMessageAsync(string message);
}

public class DialogService
{
    public async Task ShowMessageAsync(string message)
    {
        MessageDialog messageDialog = new MessageDialog(message);
        await messageDialog.ShowAsync();
    }
}

Затем вы можете использовать эту службу из любого класса в вашем приложении,.eg:

IDialogService dialogService = new DialogService();
await dialogService.ShowMessageAsync("message...");

Если вы примете рекомендованный шаблон MVVM в своем приложении, вы также можете внедрить модели ваших представлений с интерфейсом:

public ViewModel(IDialogService dialogService)
{
}

... и легко использовать макетслужба диалога в ваших модульных тестах, например:

ViewModel vm = new ViewModel(new MockDialogService());

Это невозможно, если вы используете статический класс или метод, который вы вызываете непосредственно из модели представления.

0 голосов
/ 13 июня 2018

Оба эти подхода функционально эквивалентны, но предпочтительным решением было бы не помещать методы в класс App.Вместо этого вам следует создать отдельный класс, который может быть даже статическим, который вы бы использовали для доступа к этим диалоговым окнам сообщений, которые можно использовать повторно.Причиной этого является разделение интересов.Класс App должен содержать только код, связанный с общей инициализацией приложения и жизненным циклом.Это вспомогательный метод, упрощающий отображение диалогов, поэтому он должен находиться в другом месте:

public static DialogHelpers
{
    public static async Task ShowMessageAsync(string message)
    {
       MessageDialog messageDialog = new MessageDialog(message);
       await messageDialog.ShowAsync();
    }
}

Чтобы придерживаться соглашения, необходимо добавить суффикс Async к имени метода, чтобы сделать его понятнымметод async и должен быть awaited.

Вызов этого вспомогательного метода теперь будет выглядеть следующим образом:

await DialogHelpers.ShowMessageAsync("Hello, world!");
...