Я знаю, что уже задавал вопросы по этому вопросу, но это просто сбивает с толку.
Я делаю учебное пособие по шаблону 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
он использует лямбда-выражение в конструкторе, поэтому должен быть какой-то делегат, но я не уверен, что и как он предназначен для работы с Execute и CanExecute. Я поставил Action<object>
, но это, вероятно, неправильно ...
Наконец, кто-то может указать мне учебник о том, как реализовать ICommand, который объясняет это?
Спасибо!