2016-02-26 3 views
2

Я динамически определяю окно wpf с некоторыми текстовыми полями и флажками, программно определенными. После добавления их я хочу проверить, заполнены ли все текстовые поля и флажки. Чтобы сделать это для текстовых полей У меня есть выражение лямда определенное событие:Как назначить событие выражения lamba другому событию

var mw = new MyWindow(); 
mw.KeyDown += (senderEvent, args) => 
{ 
    cycle on all windows and when it's a TEXTBOX or a COMBOBOX analyze if it's empty or not. 
    That is a lot of code which I wouldn't not replicate nor use an external routine 
} 

, но как я могу связать один и тот же код, который будет уволен также, когда выпадающий закрыты ?? Лучше всего было бы, чтобы изменить код выше (псевдокод):

mw.AllEvents += (senderEvent, args) =>{ ... } 

или

mw.KeyDown && mw.ComboBoxClose += (senderEvent, args) =>{ ... } 

, но это не имеет смысла, так как окно не имеет comboboxclose событие

либо это или при определении всех списков со списком, чтобы иметь возможность сделать что-то вроде:

newComboBox.ComboBoxClosed += (senderEvent, args) =>{ ...clone from mw.KeyDown } 

Заранее спасибо

ответ

1

Вы не можете, это разные типы делегатов.

DropDownClosed - это EventHandler, в то время как KeyDown является KeyEventHandler, поэтому, когда вы пишете лямбду, args - это тип EventArgs в одном и KeyEventArgs в другом, они просто выводят его тип из назначения.

Если вы оба из них, где EventHandlers или KeyEventHandlers, то вы можете сохранить его в переменной и назначить эту переменную.

2

Подписи методов различны, поэтому вы не можете этого сделать. Тем не менее, вы можете указать все лямбды в направлении общего метода:

private void MyHandler() 
{ 
    //bulk of the work 
} 

//.... 
mw.KeyDown += (s,e) => MyHandler(); 
mw.ComboBoxClose += (s,e) => MyHandler(); 

Если вам нужно EventArgs вы могли бы пройти его до конца и сделать какое-то переключатель на типе в MyHandler

+0

окна, не выпадающий поэтому у него нет события mw.ComboBoxClose! – Patrick

+0

О, я вижу. Вам придется вручную перевести/повторно поднять свой ComboBoxClose из 'MyWindow'. Это довольно грязно – Jonesopolis

+0

Не совсем понятно, что вы предлагаете сейчас ... – Patrick

Смежные вопросы