Aktueller Status: Ich klicke auf den Login Button und das ViewModel wechselt in die neue Ansicht.MVVM - Binden und Ändern
Wunschzustand: Ich klicke auf das LoginButton (das LoginViewModel bindet das mit der Ansicht, um die E-Mail und das Passwort zu erhalten und überprüft auf dem Server die Authentizität des Benutzers und wenn es in Ordnung ist, erhält die Anfrage als Antwort die Info über den Benutzer und ändert sich die Ansicht)
Was ich weiß: die Ansichten der Textbox, die Kommunikation mit dem Server (Umgang mit der Anforderung und die Antworten ändern, binden)
Was ich weiß nicht: von der LoginViewModel zum GeneralViewModel senden Die Antwort mit der Info über den Benutzer, weiß nicht, wie man die PasswordBox anstelle der TextBox zum Binden erhält.
Code: Loginview
<Grid Margin="0,0,-74.4,-11.8" HorizontalAlignment="Left" Width="800" Height="600" VerticalAlignment="Top">
<TextBox Text = "{Binding Email, Mode = TwoWay}" Style="{DynamicResource MyTextBox}" x:Name="textBoxEmail" VerticalContentAlignment="Bottom" HorizontalContentAlignment="Center" HorizontalAlignment="Center" Width="248" Margin="274,212,278,347" FontFamily="Segoe UI Semibold" />
<Image Source="C:\Users\Images\logo.png" x:Name="Logo" HorizontalAlignment="Left" Height="129" Margin="301,63,0,0" VerticalAlignment="Top" Width="151" RenderTransformOrigin="0.5,0.5">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="0.091"/>
<TranslateTransform/>
</TransformGroup>
</Image.RenderTransform>
</Image>
Registrieren Sie sich jetzt! Passwort vergessen? Klick hier!
LoginViewModel
class LoginViewModel : AViewModel
{
WifiAP wa;
#region fields
private string _email = null;
private TokenRequest tk;
public DelegateCommand LoginCommand { get; set; }
public string Email
{
get
{
return _email;
}
set
{
_email = value;
OnPropertyChanged("Email");
//Here's the magic
LoginCommand.RaiseCanExecuteChanged();
}
}
private string _password = null;
public string Password
{
get
{
return _password;
}
set
{
_password = value;
OnPropertyChanged("Password");
//Here's the magic
LoginCommand.RaiseCanExecuteChanged();
}
}
public string mac;
#endregion
public LoginViewModel()
{
wa = new WifiAP();
LoginCommand = new DelegateCommand(Login, CanLogin);
}
public bool CanLogin()
{
return !string.IsNullOrEmpty(Email);
}
public void Login()
{
//
}
#region auxiliaryMethods
public string getMac()
{
mac = wa.GetMACAddress();
return mac;
}
public string hashingMD5(string pass)
{
string pwd = pass;
System.Security.Cryptography.MD5 hs = System.Security.Cryptography.MD5.Create();
byte[] db = hs.ComputeHash(System.Text.Encoding.UTF8.GetBytes(pwd));
string result = Convert.ToBase64String(db);
return result;
}}
MainViewModel
public MainWindowViewModel{
this.AddViewModel(new LoginViewModel() { DisplayName = "Login", InternalName = "LoginViewModel" });
this.AddViewModel(new GeneralViewModel() { DisplayName = "General", InternalName = "GeneralViewModel" });
this.Current_ViewModel = this.GetViewModel("LoginViewModel");
Vielen Dank im Voraus für Ihre Zeit.
Ich denke du machst es dir ein bisschen schwer.Es wäre einfacher, wenn Sie BindableBase als Basisklasse für Ihre ViewModels und RegionManager mit RequestNavigate (Ziel, Parameter) -Methode für die gesamte Navigation verwenden würden. Sie können alles erhalten, indem Sie das NuGet-Paket Prism.Core installieren. Können Sie bitte den Inhalt der Login-Methode angeben? Wie ändern Sie die Ansichten ohne RegionManager? – mikes
Hallo @Mikes danke für Ihre Zeit. Ich habe das MVVM Light installiert und verwende ein paar Sachen, aber ich lerne immer noch diese neue Architektur und es ist immer noch ein Chaos in meinem Gehirn die Konzepte. Und ich mähe im Stackoverflow und versuche einige Konzepte zu verstehen, aber ich habe eine Menge Ärger. Um Ihre erste Frage zu beantworten, habe ich die E-Mail und das Passwort. – Antoine
Ich würde gerne wissen, wie Sie die Ansicht nach dem Aufruf der Login-Methode in Ihrer LoginViewModel-Klasse ändern werden. – mikes