Мне нужна помощь, чтобы понять, что представляют делегаты, и если я использовал ее в своей программе. Я использую класс RelayCommand, который я нашел в другом столбце, чтобы реализовать мои команды.RelayCommand и делегаты, пытаясь понять делегатов
RelayCommand:
public class RelayCommand : ICommand
{
readonly Action<object> _execute;
readonly Func<bool> _canExecute;
public RelayCommand(Action<object> execute, Func<bool> canExecute = null)
{
if (execute == null)
throw new ArgumentNullException(nameof(execute));
_execute = execute;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute.Invoke();
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
_execute(parameter);
}
}
В конструкторе моего ViewModel, я делаю это:
public ICommand SearchCommand { get; set; }
//Constructor
public BookingViewModel()
{
SearchCommand = new RelayCommand(SearchCommand_DoWork,() => true);
}
public async void SearchCommand_DoWork(object obj)
{
//Code inside this method not shown
}
Я знаю, что делегат является типом, который инкапсулирует метод. Вы можете написать делегат, как это:
public delegate int MethodName(string name)
Если делегат герметизирующего метода имяМетод, который имеет тип возвращаемого междунара и принимает параметр строки.
Означает ли это, что есть делегат, созданный при использовании ICommand, как показано в коде? Если метод инкапсуляции «SearchCommand_DoWork»
Надеюсь, что некоторые могут убрать некоторые вещи для меня.
Спасибо за ваш ответ, он действительно прояснил некоторые вещи о делегатах. – Mikkel