我想在MainViewModel的方法傳遞給委託變量在LoginViewModel對象是這樣的:爲什麼這個委託變量爲null?
public class ApplicationViewModel : INotifyPropertyChanged
{
private LoginViewModel loginViewModel;
public ApplicationViewModel()
{
loginViewModel = new LoginViewModel();
this.loginViewModel.Login += this.checkLoginData; //stays null..
CurrentPageViewModel = this.loginViewModel; //works fine
}
private void checkLoginData(string username, string password)
{
//validating data
}
}
但由於某些原因,loginViewModel.Login是空...
而這個命令在LoginViewModel在開始時持續觸發這個事件,並告訴我Login == null,這不是我期望的,因爲我在MainViewModel構造函數初始化委託。
我不是MVVM/WPF的專家,但我試圖爲它工作。
編輯:額外的信息。
而且loginViewModel.Login是這樣的委託變量:
class LoginViewModel : ObservableObject, IPageViewModel
{
public delegate void DelegateLogin(string username, string password);
private DelegateLogin _login;
public DelegateLogin Login
{
get { return this._login; }
set
{
/*
if(this._login != value)
{
this._login = value;
OnPropertyChanged("Login");
}*/
this._login = value;
OnPropertyChanged("Login");
}
}
public ICommand CheckLoginCommand
{
get
{
if (Login != null)
{
this.checkLoginCommand = new Command(p => { Login(this._username, this._password); });
}
else
{
System.Windows.MessageBox.Show("Login DELEGATE IS EMPTY!?!?!"); //keeps firing...
}
return this.checkLoginCommand;
}
}
}
'登錄'是委託或事件?發佈如何聲明也。 –
另外,是「checkLoginData」方法,還是另一個委託/事件變量? – elgonzo
在爲其分配處理程序後,'Login'不能爲空。 1)序列不是你所聲稱的,或者2)你已經設法創建了2個獨立的viewmodel類實例。但是,你還沒有發佈足夠的細節讓我們對這些觀點有深入的瞭解。 – McGarnagle