【发布时间】:2017-07-11 20:47:22
【问题描述】:
我有一个DelegateCommand,看起来像这样:
public class DelegateCommand : ICommand
{
private readonly Predicate<object> _canExecute;
private readonly Action<object> _execute;
public event EventHandler CanExecuteChanged;
public DelegateCommand(Action<object> execute)
: this(execute, null)
{
}
public DelegateCommand(Action<object> execute, Predicate<object> canExecute)
{
_execute = execute;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute(parameter);
}
public void Execute(object parameter)
{
_execute(parameter);
}
public void RaiseCanExecuteChanged()
{
CanExecuteChanged?.Invoke(this, EventArgs.Empty);
}
}
我有一个允许用户注册到数据库的过程。但是,我需要添加一些验证,例如,用户名是否已经存在,密码是否匹配规则等。这是注册命令:
#region RegisterCommand
private DelegateCommand _registerCommand;
public ICommand RegisterCommand
{
get
{
_registerCommand = new DelegateCommand(param => Register());
return _registerCommand;
}
}
private bool CanRegister()
{
return true;
}
private void Register()
{
var newUser = new User
{
FirstName = _firstname,
LastName = _lastname,
Username = _username,
Password = "", // TODO: Hashing and storing of passwords
};
using (var context = new WorkstreamContext())
{
var users = context.Set<User>();
users.Add(newUser);
context.SaveChanges();
}
}
#endregion
如您所见,我有一个名为CanRegister() 的方法,我想用它来过滤注册过程。我的问题是,我将如何在此处的调用中实现CanRegister():
_registerCommand = new DelegateCommand(param => Register());
如果CanRegister 返回 false,则提示或拒绝该过程?
【问题讨论】:
-
尝试阅读here的答案,可能会有帮助
-
“我将如何在此处的调用中实现 CanRegister()”——这是什么意思? 实现
CanRegister()是将代码放入方法体中,即将您现在拥有的return true;替换为真实代码。要使用方法“在此处调用”意味着简单地调用例如方法中的方法。一个 lambda,即_registerCommand = new DelegateCommand(param => Register(), param => CanRegister());。 你想做什么?你实际上需要什么帮助?代码现在在做什么,确切地你想让它做什么,你尝试了什么,具体你需要什么帮助?