Mike Niday Ответов: 1

Передать метод нажатия кнопки в качестве параметра в коде позади?


У меня есть шаблон данных с кнопкой, которая привязывается к некоторому тексту, и обработчиком щелчков, который жестко закодирован.

<DataTemplate DataType= "{x:Type local:ContentClass} " />
< Button Content = "{Binding MyContent} "Click = "Button_Click"/>
< / DataTemplate>
public class ContentClass
{
   public string MyContent { get; set; }

   public ContentClass(string content)
   {
      MyContent = content;
   }
}
Я могу отобразить кнопку с текстом "Привет" со следующим кодом:
ContentClass foo = new ContentClass("hello");
Это прекрасно работает.

То, что мне нужно, чтобы быть в состоянии сделать это:
ContentClass foo = new ContentClass("hello", Method1);
Затем, когда вы нажмете на кнопку, Method1 выполняется (что будет записано в коде сзади).

Из всех ICommand примеры, с которыми я сталкивался, рыская в интернете, ни один не может показать, как это сделать. Они рассказывают все о том, как ICommand работает, но никто на самом деле не показывает, как подключить его, не говоря уже о том, чтобы параметризовать его в коде позади.

Любая помощь будет оценена по достоинству.

Что я уже пробовал:

Я попытался реализовать ICommand интерфейс, RelayCommand, прием. Примеры кода компилируются, но при нажатии кнопки ничего не происходит. Ни одна точка останова не попадает куда-либо, когда я переступаю через нее (???).

Mike Niday

Я попытался привязать свойство Name, чтобы просто использовать тот же обработчик, а затем использовать оператор case для вызова соответствующего метода на основе уникального имени (я знаю, kludgy, но эй, это может сработать), но вы не можете привязаться к свойству Name.

Mike Niday

Я решил эту проблему клуджийским способом, добавив маркер в свой класс данных, а затем отключив маркер в универсальном обработчике (DataContext), чтобы определить, какой метод вызывать. Тем не менее, я действительно хотел бы знать, как решить эту проблему большим мальчиком. :-)

Maciej Los

Ты не видел этот?

1 Ответов

Рейтинг:
0

Maciej Los

Если я правильно вас понял, вы хотите передать обработчик событий в качестве параметра в свой класс.

Итак, что-то вроде этого должно сработать (но я его не проверял):

public class ContentClass
{
   public string MyContent { get; set; }
 
   public ContentClass(string content, Object sender, EventHandler eh)
   {
      MyContent = content;
      sender.Click += eh;
   }
}


Но я думаю, что вы идете в неправильном направлении, поскольку фреймворк WPF отличается от технологии WinForm и использует RoutedEvents.

Пожалуйста, прочтите это:
События (WPF)[^]
Общие Сведения О Перенаправленных Событиях[^]
Как добавить обработчик событий с помощью кода[^]
Как создать Пользовательское Маршрутизируемое событие[^]


Как: поднимать и потреблять события[^]
Обработка и вызов событий[^]


Mike Niday

Спасибо вам за ваши усилия. Это не будет компилироваться, так как компилятор понятия не имеет, что такое "щелчок" по отношению к передаваемому объекту.

Maciej Los

Я был в этом совершенно уверен.