gpt4 book ai didi

c# - 为什么这个委托(delegate)变量为空?

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:30 24 4
gpt4 key购买 nike

我想像这样将 MainViewModel 中的方法传递给 LoginViewModel 对象中的委托(delegate)变量:

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 构造函数中初始化了委托(delegate)。

我不是 MVVM/WPF 方面的专家,但我正在努力工作。

编辑:额外信息。

而 loginViewModel.Login 是一个像这样的委托(delegate)变量:

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;
}
}
}

最佳答案

试试这个:

public ICommand CheckLoginCommand
{
get
{
if (this.checkLoginCommand == null)
this.checkLoginCommand = new Command(p => {
if (Login != null)
Login(this._username, this._password);
else
System.Windows.MessageBox.Show("Login DELEGATE IS EMPTY!?!?!"); //keeps firing...
});
return this.checkLoginCommand;
}
}

这样做的好处是无论是否设置了 Login 委托(delegate)都可以创建命令。除了其他事情,希望 Login 在命令被调用时准备就绪。

关于c# - 为什么这个委托(delegate)变量为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21267387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com