В моем проекте я хотел бы использовать команды MVVM (&). Я начал изучать команды и реализацию ICommand.Как реализовать ICommand без параметров
Я хотел бы создать реализацию ICommand
без параметров. (Для того, чтобы вызвать загрузку данных/смыва данных и т.д. - не нужны никакие параметры, чтобы сделать это, так что это только кажется естественным, чтобы попытаться создать команду без параметров)
Это код, который я использую:
using System.Windows.Input;
public class NoParameterCommand : ICommand
{
private Action executeDelegate = null;
private Func<bool> canExecuteDelegate = null;
public event EventHandler CanExecuteChanged = null;
public NoParameterCommand(Action execute)
{
executeDelegate = execute;
canExecuteDelegate =() => { return true; };
}
public NoParameterCommand(Action execute, Func<bool> canExecute)
{
executeDelegate = execute;
canExecuteDelegate = canExecute;
}
public bool CanExecute()
{
return canExecuteDelegate();
}
public void Execute()
{
if (executeDelegate != null)
{
executeDelegate();
}
}
}
Но я получил сообщения об ошибках, не реализующий интерфейс ICommand в правильном порядке ('XXX.YYYY.NoParameterCommand' does not implement interface member 'System.Windows.Input.ICommand.Execute(object)'
)
Так я думал, что делать это, как это вместо:
(Добавлены параметры, которые отсутствовали из CanExecute
и Execute
)
public class NoParameterCommand : ICommand
{
...omitted - no changes here...
public bool CanExecute(object parameter) //here I added parameter
{
return canExecuteDelegate();
}
public void Execute(object parameter) //and here
{
if (executeDelegate != null)
{
executeDelegate();
}
}
}
- Это хороший способ сделать это?
- ДОЛЖНЫ ИСПОЛЬЗОВАТЬ ДРУГОЙ ПУТЬ? (ЕСЛИ ТАК, ЧТО Я ДОЛЖЕН СДЕЛАТЬ ВМЕСТО?)
Это хороший способ, за исключением, конечно, что нет смысла индексировать ваши поля и события до нуля. Поля по умолчанию являются пустыми, как и поле поддержки за событием. –
@ KrisVandermotten Это просто старая привычка, от которой я не могу избавиться. Даже не осознавал, что это там, пока вы не указали это. :) – mishan