Как исправить ошибку компилятора-не удается преобразовать из группы методов в систему.Делегат?

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

 void ExecuteHandler(object sender, ExecutedRoutedEventArgs e)
 {
 }

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

2 ответов


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

CommandManager.AddExecuteHandler(this, (Action<object,ExecutedRoutedEventArgs>)ExecuteHandler);

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

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

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

CommandManager.AddExecutedHandler(this, (s, e) => ExecuteHandler(s, e));