Wie Warnmeldung anzeigen von ViewModel
Neuling hier. Ich möchte die display-Alarm aus ViewModel
.
problem: Der name DisplayAlert
existiert nicht im aktuellen Kontext
Wie zu tun? Unten ist mein 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
}
}
Update
Es gibt
a) Acr.UserDialogs V6.5.1
b) Acr.XamForms.UserDialog v5.0.0
Ich bin mit der älteren version, die ist (b), da ich m, die mit der PCL .
Habe ich es importieren und ändern Sie den code, um es zu verwenden, wie oben. Aber es ist err msg:
mit Acr.UserDialogs;
Err Msg:
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)
Dank
- Der name 'DisplayAlert" existiert nicht im aktuellen Kontext
- Können Sie teilen Sie Ihre stack-trace, wenn das passiert? Auch
DisplayAlert
am ehesten angebracht ist, die UI-lifecycle, so dass es nicht direkt genannt, die außerhalb der Seite (in deinem Fall die ViewModel). Eine Lösung wurde diese hier über ein pub/sub-Umsetzung. - Wenn Sie einzelne Aktivität ,vielleicht können Sie App.Aktuelle.MainPage.DisplayActionSheet(params)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie es behalten wollen rein, Sie sollten wahrscheinlich unterlassen Sie das verwenden von Warnungen in der traditionellen Art und Weise und einen Weg finden, einzuholen, die Sie auslösen können, aus der Wechsel einer Immobilie.
Allerdings gibt es einen anderen, einfacheren Weg. Könnten Sie ACR.UserDialogs. Wenn Sie Sie nicht verwenden .NET-Standard-doch Sie müssen Sie installieren, eine ältere version des NuGet-Paket. Denken Sie daran, um es zu installieren in Ihrem gemeinsamen Projekt als auch für die Plattform-Projekte. Braucht es vielleicht auch einige von code für die Initialisierung in Abhängigkeit der Plattform, stellen Sie sicher, überprüfen Sie die readme-Datei.
Nun können Sie entweder die Instanz direkt mit:
UserDialogs.Instance
und dann eine Methode zu zeigen, eine Warnung oder was auch immer Sie brauchen. Halten Sie ein bisschen mehr MVVM-wie könnte man sich auch registrieren diese Instanz mit der Schnittstelle gegenüber und haben es injiziert in Ihre Modelle anzeigen.Application.Current.MainPage
nicht der Punkt, um eine Datei oder Klasse aufgerufenMainPage
es ist eine Eigenschaft derApp
- Objekt und enthält die Seite, die als Startseite Ihrer Anwendung. So kann es jeder Seite.Du musst die Seite auf das ViewModel
Ihrer Ansicht nach passieren der Seite, um das ViewModel mit 'dieser'
und dann im view-Modell