建议在App.xaml.cs中调用UWP MessageDialog的方法

时间:2018-06-13 11:18:49

标签: c# uwp messagedialog

我的App.xaml.cs中只有一个按钮,我有一个MessageDialog 我希望从其他页面使用它。 有几种方法似乎有效,但由于异步和任务是微妙的,因此特别正确吗?

使用await App.mymessagebox("A message")调用以下内容:

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

使用App the_app=(App)Application.current; await the_app.mymessagebox("A message");调用以下内容:

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

2 个答案:

答案 0 :(得分:0)

这两种方法在功能上都是等价的,但首选解决方案不是将方法放在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!");

答案 1 :(得分:0)

我认为推荐的方法是创建一个实现接口的客户端对话框或消息服务:

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

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

然后,您可以在应用中的任何课程中使用此服务,例如:

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

如果您在应用中采用推荐的MVVM模式,您还可以使用界面注入视图模型:

public ViewModel(IDialogService dialogService)
{
}

...并在单元测试中轻松模拟对话服务,例如:

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

如果您使用直接从视图模型调用的静态类或方法,则无法执行此操作。