実際の状態:ログインボタンをクリックすると、ViewModelが新しいビューに変わります。MVVM - バインドと変更
希望の状態:私はLoginButtonをクリックします(LoginViewModelはビューとバインドして電子メールとパスワードを取得し、サーバーの信頼性を検証し、OKの場合要求がユーザーの情報と変更ビュー)私が知っている何
:(サーバーとのテキストボックス、通信をバインド要求と回答)を取り扱い、ビューを変更
私が知らない何か:GeneralViewModelにLoginViewModelから送信答えは、ユーザーについての情報、バインドのTextBoxの代わりにPasswordBoxを維持する方法を知らない。
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>
サインアップ! パスワードを忘れましたか?ここをクリック!
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");
お時間を事前に感謝します。
私はあなたが少し難しいと思っています。ViewModelの基本クラスとしてBindableBaseを使用し、全体のナビゲーションにRequestNavigate(ターゲット、パラメータ)メソッドを使用するRegionManagerを使用する方が簡単です。 NuGetパッケージPrism.Coreをインストールすることで、すべてを手に入れることができます。ログイン方法の内容を教えてください。どのようにRegionManagerなしでViewsを変更しますか? – mikes
あなたの時間のためにこんにちは@mikesありがとう。私はMVVM Lightをインストールし、いくつかのものを使用していますが、私はまだこの新しいアーキテクチャを勉強しています。私はいくつかの概念を理解しようとしているstackoverflowで粉砕しているが、私は多くの問題を抱えている。あなたの最初の質問に答えるために、私は電子メールとパスワードを持っています。 – Antoine
LoginViewModelクラスでLoginメソッドを呼び出した後、Viewをどのように変更するのかを知りたいと思います。 – mikes