DelegateCommand 中的 CanExecute 和表达式声明不起作用
CanExecute in DelegateCommand and expression declaration doesn't work
我的问题很简单。
为什么这样有效:
public DelegateCommand LogInCommand { get; }
Func<bool> canExecuteLogIn = () => !StringService.IsNullOrEmpty(_entries.LoginText, _entries.PasswordText);
LogInCommand = new DelegateCommand(OnLogInTapped, canExecuteLogIn);
但事实并非如此:
public DelegateCommand LogInCommand => new DelegateCommand(OnLogInTapped,
() => !StringService.IsNullOrEmpty(_entries.LoginText, _entries.PasswordText));
我是这样检查的:
public string LoginEntryText
{
get { return _entries.LoginText; }
set
{
_entries.LoginText = value;
LogInCommand?.RaiseCanExecuteChanged();
}
}
不行,我的意思是Func在初始化之后就再也不执行了。
问题对我来说不是很清楚,但我怀疑原因如下。
这个
public DelegateCommand LogInCommand => new DelegateCommand(...)
相当于这个
public DelegateCommand LogInCommand { get {return new DelegateCommand(...)}}
所以每次你访问 LogInCommand
属性 - 它 returns 新的 DelegateCommand
实例。这意味着您在命令的新实例上执行 RaiseCanExecuteChanged
,并且之前调用此 属性 并且可以对此更改做出反应的所有代码都使用它们自己的实例。
这与第一种情况不同,第一种情况只有一个 DelegateCommand
实例供所有人使用。
我的问题很简单。 为什么这样有效:
public DelegateCommand LogInCommand { get; }
Func<bool> canExecuteLogIn = () => !StringService.IsNullOrEmpty(_entries.LoginText, _entries.PasswordText);
LogInCommand = new DelegateCommand(OnLogInTapped, canExecuteLogIn);
但事实并非如此:
public DelegateCommand LogInCommand => new DelegateCommand(OnLogInTapped,
() => !StringService.IsNullOrEmpty(_entries.LoginText, _entries.PasswordText));
我是这样检查的:
public string LoginEntryText
{
get { return _entries.LoginText; }
set
{
_entries.LoginText = value;
LogInCommand?.RaiseCanExecuteChanged();
}
}
不行,我的意思是Func在初始化之后就再也不执行了。
问题对我来说不是很清楚,但我怀疑原因如下。
这个
public DelegateCommand LogInCommand => new DelegateCommand(...)
相当于这个
public DelegateCommand LogInCommand { get {return new DelegateCommand(...)}}
所以每次你访问 LogInCommand
属性 - 它 returns 新的 DelegateCommand
实例。这意味着您在命令的新实例上执行 RaiseCanExecuteChanged
,并且之前调用此 属性 并且可以对此更改做出反应的所有代码都使用它们自己的实例。
这与第一种情况不同,第一种情况只有一个 DelegateCommand
实例供所有人使用。