我知道我已经就此问了一些问题,但这些问题令人困惑。 我正在做一个关于WPF MVVM模式的教程,但似乎我无法正确使用它,就像在教程中一样,它没有详细介绍如何实现ICommand接口。 (不确定它到底有多正确?!!)
我有以下ICommand实现:
class ViewCommand : ICommand
{
#region ICommand Members
private Predicate<object> _canExecute;
private Predicate<bool> _execute(object param);
public ViewCommand(Action<object> action)
{
}
public bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute(parameter);
}
public void Execute(object parameter)
{
_execute(parameter);
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
#endregion
}
现在使用:
class StartViewModel : ViewModel
{
public ViewCommand startViewCommand;
public ViewCommand StartCommand
{
get
{
if (startViewCommand == null)
startViewCommand = new ViewCommand(
param => this.StartApplication()); // StartApplication returns void
return startViewCommand;
}
}
我无法弄清楚ViewCommand
类的构造函数应该做什么?在StartViewModel
类中,它在构造函数中使用了lambda表达式,因此需要有一些委托,但我不确定它与Execute和CanExecute一起使用的意义和方式。我放了一个Action<object>
,但这可能不对......
最后,有人可以指点我一个关于如何实现解释它的ICommand的教程吗?
谢谢!
答案 0 :(得分:3)
看看Josh Smith的tutorial注意继电器命令,他在那里实现它。
答案 1 :(得分:0)
您的_execute
代表不应该是Predicate<bool>
,而应该是Action<object>
。无论如何,为什么不使用像Josh Smith的RelayCommand
或MVVM工具包DelegateCommand
这样的现有类?