如何使用Xamarin.Forms显示警报框进行验证?

Nir*_*hta 12 iphone android ios xamarin xamarin.forms

如何使用Xamarin.Forms显示警报框进行验证?

我知道我们可以使用以下来自ContentView代码的代码显示警报,但我想从我的ViewModel显示alertbox.

DisplayAlert ("Alert", "You have been alerted", "OK");
Run Code Online (Sandbox Code Playgroud)

我已经使用以下代码在View中注册了我的ViewModel.

ViewFactory.Register<[ContentPage], [ContentPageViewModel]> (); 
Run Code Online (Sandbox Code Playgroud)

Mar*_*des 42

您可以从任何地方在显示警报Xamarin.Forms项目通过MainPage静态的财产App.Current

await App.Current.MainPage.DisplayAlert("Test Title", "Test", "OK");
Run Code Online (Sandbox Code Playgroud)

  • 应该是例外答案.谢谢! (2认同)

小智 6

您可以使用:

Application.Current.MainPage.DisplayAlert(title, message, buttonText)
Run Code Online (Sandbox Code Playgroud)

但是,在视图模型中使用它是一个不好的做法。

相反,在我看来,最佳实践是将其与视图模型和页面解耦。解决方案是创建一个服务,负责在应用程序中显示警报。您可以在下面找到问题的简单答案。但是,DisplayAlert 方法有许多重载,您可以向服务添加将使用这些重载的新方法。

一个代码中的两个简单示例:

首先为您的服务实现接口:

public interface IDialogService
{
    public Task ShowErrorAsync(string message, string title, string buttonText);
    public Task ShowErrorAsync(string message, string title, string buttonText, Action CallBackAferHide);
}
Run Code Online (Sandbox Code Playgroud)

然后,在具体实现中实现该接口:

public class DialogService : IDialogService
{
    public async Task ShowErrorAsync(string message, string title, string buttonText)
    {
        await Application.Current.MainPage.DisplayAlert(title, message, buttonText);
    }

    public async Task ShowErrorAsync(string message, string title, string buttonText, Action CallBackAferHide)
    {
        await Application.Current.MainPage.DisplayAlert(title, message, buttonText);
        CallBackAferHide?.Invoke();
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个方法允许您显示警报,第二个方法允许您提供一个回调方法,该方法将在用户关闭警报框后调用 - 例如导航回上一页。

两种情况都可以使用第二种方法,只需调用:

await ShowErrorAsync("message", "title", "OK", null);
Run Code Online (Sandbox Code Playgroud)

首先CallBackAferHide?.Invoke();检查是否提供了 Action,然后如果它不为空则调用。

在您的视图模型中,注入服务并仅调用其提供参数的方法。

我希望这会有所帮助:)。一切顺利!