如何从 ViewModel 显示警报 [英] How to display alert from ViewModel

查看:24
本文介绍了如何从 ViewModel 显示警报的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想显示来自 ViewModel 的警报.

I want to display alert from ViewModel.

问题:名称DisplayAlert 在当前上下文中不存在

problem: The name DisplayAlert does not exist in the current context

怎么做?下面是我的代码.

How to do that? Below is my code.

-- XAML
<Button x:Name="BtnLogin" Command="{Binding LoginCommand}" BackgroundColor="Green" TextColor="White" WidthRequest="150" HeightRequest="60"  Text="Login" />


--- ViewModel :

class LoginViewModel : ViewModelBase
    {
       

        private string _username;

        public string Username
        {
            get { return _username; }
            set
            {
                _username = value;
                OnPropertyChanged();
            }     
         }

        private string _password;

        public string Password
        {
            get { return _password; }
            set
            {
                _password = value;
                OnPropertyChanged();
            }
        }

        public LoginViewModel()
        {          

        }

        public Command LoginCommand
        {
            get
            {
                return new Command(ValidateUser);
            }

        }     

       async void ValidateUser()
        {
            if (_username.Length > 1 && _password.Length > 1)
            {
               //await DisplayAlert("Login", "Login Success", "Ok");
            //--Update:

                UserDialogs.Instance.Alert("Login Success", "Login", "OK");
            }
            else
            {
               // display invalid credential
            }
        }

更新有a) Acr.UserDialogs V6.5.1b) Acr.XamForms.UserDialog v5.0.0

Update There are a) Acr.UserDialogs V6.5.1 b) Acr.XamForms.UserDialog v5.0.0

我使用的是 (b) 的旧版本,因为我使用的是 PCL .

I am using the older version which is (b) since I m using PCL .

我确实导入了它并更改了代码以如上所述使用它.但是有错误消息:使用 Acr.UserDialogs;

I did import it and change the code to use it as above. But there is err msg: using Acr.UserDialogs;

错误消息:

Java.Lang.NullPointerException: Exception of type 'Java.Lang.NullPointerException' was thrown.
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <3fd174ff54b146228c505f23cf75ce71>:0 
  at Java.Interop.JniEnvironment+InstanceMethods.CallNonvirtualVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniObjectReference type, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00089] in <bd30a18775d94dc8b6263aecd1ca9077>:0 
  at Java.Interop.JniPeerMembers+JniInstanceMethods.FinishCreateInstance (System.String constructorSignature, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x0004f] in <bd30a18775d94dc8b6263aecd1ca9077>:0 
  at Android.App.AlertDialog+Builder..ctor (Android.Content.Context context) [0x0007a] in <d855bac285f44dda8a0d8510b679b1e2>:0 
  at Acr.UserDialogs.Builders.AlertBuilder.Build (Android.App.Activity activity, Acr.UserDialogs.AlertConfig config) [0x0000d] in <addbf2648c204949b40c582bd49b7ddd>:0 
  at Acr.UserDialogs.UserDialogsImpl.Alert (Acr.UserDialogs.AlertConfig config) [0x00038] in <addbf2648c204949b40c582bd49b7ddd>:0 
  at Acr.UserDialogs.AbstractUserDialogs.Alert (System.String message, System.String title, System.String okText) [0x00024] in <ec0104dbfc974343b668f7b28f49a1ab>:0 
  at BookingNow.ViewModel.LoginViewModel.ValidateUser () [0x00026] in C:\Users\Edward\documents\visual studio 2017\Projects\BookingNow\BookingNow\BookingNow\ViewModel\LoginViewModel.cs:88 
  --- End of managed Java.Lang.NullPointerException stack trace ---
java.lang.NullPointerException
    at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:143)
    at android.app.AlertDialog$Builder.<init>(AlertDialog.java:360)
    at md5270abb39e60627f0f200893b490a1ade.ButtonRenderer_ButtonClickListener.n_onClick(Native Method)
    at md5270abb39e60627f0f200893b490a1ade.ButtonRenderer_ButtonClickListener.onClick(ButtonRenderer_ButtonClickListener.java:30)
    at android.view.View.performClick(View.java:4476)
    at android.view.View$PerformClick.run(View.java:18787)
    at android.os.Handler.handleCallback(Handler.java:730)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:176)
    at android.app.ActivityThread.main(ActivityThread.java:5493)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
    at dalvik.system.NativeStart.main(Native Method)

谢谢

推荐答案

如果你想保持纯粹,你应该避免以传统方式使用警报,并找到一些方法来收集你可以通过切换触发的输入财产.

If you want to keep it pure, you should probably refrain from using alerts in the traditional way and find some way to collect input that you can trigger from toggling a property.

然而,还有另一种更简单的方法.您可以使用 ACR.UserDialogs.如果您尚未使用 .NET Standard,则需要安装旧版本的 NuGet 包.请记住将它安装在您的共享项目和平台项目中.根据平台可能还需要一些初始化代码,请务必查看自述文件.

However, there is another, simpler way. You could use ACR.UserDialogs. If you're not using .NET Standard yet you will need to install an older version of the NuGet package. Remember to install it in both your shared project as well as the platform projects. It might also need some initialization code depending on the platform, make sure to check the readme.

您现在可以使用以下命令直接调用实例:UserDialogs.Instance,然后是显示警报或任何您需要的方法.为了让它更像 MVVM,您还可以使用它的接口对应物注册此实例,并将其注入到您的视图模型中.

You can now either call the instance directly with: UserDialogs.Instance and then a method to show an alert or whatever you need. To keep it a bit more MVVM like you could also register this instance with it's interface counterpart and have it injected into your view models.

这篇关于如何从 ViewModel 显示警报的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆