gpt4 book ai didi

xamarin.forms - 如何从 ViewModel 显示警报

转载 作者:行者123 更新时间:2023-12-04 07:28:30 28 4
gpt4 key购买 nike

我想显示来自 ViewModel 的警报.
问题:姓名DisplayAlert在当前上下文中不存在
怎么做?下面是我的代码。

-- 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.1
b) Acr.XamForms.UserDialog v5.0.0
我使用的是旧版本,即 (b),因为我使用的是 PCL 。
我确实导入了它并更改了代码以如上所述使用它。但是有错误消息:
使用 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)
谢谢

最佳答案

  • 创建接口(interface):
  • public interface IMessageService
    {
    Task ShowAsync(string message);
    }
  • 实现接口(interface):
  • public class MessageService : IMessageService
    {
    public async Task ShowAsync(string message)
    {
    await App.Current.MainPage.DisplayAlert("YourApp", message, "Ok");
    }
    }
  • 将依赖服务注入(inject) App 类:
  • public partial class App : Application
    {
    public App()
    {
    //Add the next line
    DependencyService.Register<ViewModels.Services.IMessageService, Views.Services.MessageService>();
    InitializeComponent();
    MainPage = new MainPage();
    }
    }
  • 在你的 ViewModel 中初始化它并使用:
  • public class YourViewModel 
    {
    private readonly Services.IMessageService _messageService;

    public YourViewModel()
    {
    this._messageService = DependencyService.Get<Services.IMessageService>();

    //Show the dialog with next line
    _messageService.ShowAsync("Hi!!!");
    }
    }

    关于xamarin.forms - 如何从 ViewModel 显示警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45277046/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com