Я создал метод расширения, который работает так, как я хотел. Я заметил, что как-то параметры party
и property
«копируются» в выражение лямбда. Таким образом, мне не нужно поддерживать собственный список ассоциаций editor/party/property.Повторить метод расширения лямбда
Однако мне нужно сбросить событие ButtonClick ButtonEdit. Поскольку это анонимно, я не могу использовать - = opertor.
Итак, мой вопрос: как мне переписать этот метод, чтобы делегат мог быть удален? Или, какой другой подход я могу использовать для обработки конкретного обработчика событий с дополнительными параметрами (например, party
и property
)?
private static void SetupAddressButtonClickEvent(this ButtonEdit editor, Party party, string property)
{
editor.SetAddressDisplayText(party, property);
editor.ButtonClick += (sender, e) =>
{
party.ShowAddressLookupDialog(property);
editor.SetAddressDisplayText(party, property);
};
}
Спасибо, Стефан
Так что мне нужно сохранить список ассоциаций ButtonEdit/Action внутри? – Stefan
Я не знаю, где вы пытаетесь удалить действие, поэтому я не могу помочь с его удалением. Вы пытаетесь удалить его в другом обработчике кликов? –
Я удаляю обработчик событий, прежде чем повторно привязывать элементы управления к форме. Обработчик события будет ссылаться на расположенный объект, если я его не сброшу. Однако ваш вариант 2 выглядит интересным. Имеет ли этот подход название? – Stefan