То, как я фиксирую 'ошибку компилятора - не может преобразовать из группы метода к Системе. Делегат'?

 public MainWindow()
 {
    CommandManager.AddExecutedHandler(this, ExecuteHandler);
 }

 void ExecuteHandler(object sender, ExecutedRoutedEventArgs e)
 {
 }

Ошибка 1 Аргумент 2: не может преобразовать из 'группы метода' к 'Системе. Делегат'

12
задан Tim Lovell-Smith 19 March 2010 в 18:56
поделиться

2 ответа

Думаю, есть несколько ExecuteHandler с разными подписями. Просто приведите обработчик к нужной версии:

CommandManager.AddExecuteHandler(this, (Action<object,ExecutedRoutedEventArgs>)ExecuteHandler);
14
ответ дан 2 December 2019 в 19:53
поделиться

Вы не можете передать "метод" непосредственно как параметр, вам нужно передать выражение. Вы можете обернуть метод в делегат:

CommandManager.AddExecutedHandler(this, new ExecutedRoutedEventHandler(ExecuteHandler));
CommandManager.AddExecutedHandler(this, (Action<object,ExecutedRoutedEventArgs>) ExecuteHandler);

или в лямбду - что лично мне нравится больше всего, так как вам не нужно запоминать имя делегата:

CommandManager.AddExecutedHandler(this, (s, e) => ExecuteHandler(s, e));
3
ответ дан 2 December 2019 в 19:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: