爲了讓我熟悉MVVM for WinRT,我一直在看例子的MvvmLight WinRT項目。目前我遇到了一個問題,即我的RelayCommand只被調用一次(在構建viewmodel時)。如果用戶被授權,我想要做的是轉到MainViewModel。如果我在LoginCommand方法中刪除了登錄的條件檢查,則RelayCommand按預期工作。任何想法,我做錯了什麼?我不應該在LoginCommand中進行驗證嗎?NavigateCommand只調用一次
LoginViewModel(一些代碼已被移除):
public class LoginViewModel : ViewModelBase {
private readonly IDataService _dataService;
private readonly INavigationService _navigationService;
private RelayCommand _navigateCommand;
private Login login; //contains username and password
/// <summary>
/// Gets the NavigateCommand.
/// THIS DOES NOT GET FIRED UPON BUTTON CLICK
/// </summary>
public RelayCommand LoginCommand{
get {
if (login != null && login.UserName.Equals("Test"))
return _navigateCommand ?? (_navigateCommand = new RelayCommand(() => _navigationService.Navigate(typeof(MainPage))));
return _navigateCommand;
}
}
LoginPage.xaml.cs(一些代碼已被移除):
public sealed partial class LoginPage {
public LoginViewModel Vm {
get { return (LoginViewModel)DataContext; }
}
public LoginPage() {
InitializeComponent();
}
protected override void LoadState(object state) {
var casted = state as LoginPageState;
if (casted != null) {
Vm.Load(casted);
}
}
protected override object SaveState() {
return new LoginPageState {
Credentials = new Login {
UserName = txtUserName.Text,
Password = txtPassword.Text
}
};
}
public class LoginPageState {
public Login Credentials { get; set; }
}
}
}
LoginPage.xaml(一些代碼已被刪除)
<Button Content="Login"
x:Name="NextPageButton"
HorizontalAlignment="Right"
VerticalAlignment="Top"
Margin="10"
Command="{Binding LoginCommand}" />
它仍然沒有工作,我認爲另一個問題可能是模型和視圖的約束。更新視圖背後的模型是否有最佳做法? – theStig