ViewModel中的警报对话框 - MVVMCross

cas*_*las 11 c# mvvmcross xamarin

ViewModel,我有Save检查isValid属性的方法.

如果isValidfalse,那么我想显示一条错误消息.

由于AlertDialog是特定于平台,我想知道你如何处理这种情况ViewModel

public void Save()
{
  if (isValid)
  {
      OnExit(this, null);
   }
   else
   {
      //issue an alert dialog here
   }
}
Run Code Online (Sandbox Code Playgroud)

更新

我使用了以下插件并添加了以下代码行,如下所示,但它会引发错误.

else
{
    Mvx.Resolve<IUserInteraction>().Alert("it is not valid");
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更新2

Chance.MvvmCross.Plugins.UserInteraction 是命名空间,但它用作类型错误.

在此输入图像描述

更新3

我添加了Acr.UserDialogs插件并调用如下,但我有同样的错误.

Mvx.Resolve<IUserDialogs>().Alert("it is not valid");
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Pla*_*d3r 11

使用ACR用户对话框是最简单的方法.

在App.cs(Core/PCL)中,您需要注册界面:

public class App : MvxApplication
{
    public override void Initialize()
    {
       // Example Other registrations
        CreatableTypes()
            .EndingWith("Service")
            .AsInterfaces()
            .RegisterAsLazySingleton();

        Mvx.RegisterSingleton<IUserDialogs>(() => UserDialogs.Instance);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过ViewModel调用警报表单.

Mvx.Resolve<IUserDialogs>().Alert("it is not valid");
Run Code Online (Sandbox Code Playgroud)

Android平台支持注意事项

然后,如果您支持Android,则需要使用活动上下文的实例初始化UserDialog.这将必须在您将使用的每个活动中完成,UserDialogs或者如果您有共享基础活动,则可以在那里进行.

[Activity]
public class MainActivity : MvxActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        SetContentView(Resource.Layout.activity_main);

        // Initialize Acr UserDialogs
        UserDialogs.Init(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

另外

如果需要更自定义的模式实现,可以按照Mvvmcross文档使用接口的特定于平台的实现.


Nur*_*aya 5

这就是我在viewmodel中处理Alert消息的方法.试试这个.

await App.Current.MainPage.DisplayAlert("Active subscription required", "You do not have an active subscription for Part 2 exams", "OK");
Run Code Online (Sandbox Code Playgroud)