2016-06-06 2 views
1

Обработка событий в F # действительно вызывает головную боль для меня. Ошибка я облицовкойИспользование пользовательского события в F #

This expression was expected to have type 
    obj -> unit  
but here has type 
    System.EventHandler<obj> 

Я опубликовать событие следующим образом

type ... 
    let dataChanged = new Control.Event<obj>() 

    [<CLIEvent>] 
    member this.DataChanged = dataChanged.Publish 

    member private this.NotifyDataChanged(sender : obj) = 
     dataChanged.Trigger(sender) 

И я пытаюсь поймать его, как это

type ... 

    let dataChangedHandler = new System.EventHandler<obj>(fun sender -> this.DataItems_DataChanged(sender)) 

    do this.DataItems.DataChanged.Add(dataChangedHandler) 

    member private this.DataItems_DataChanged(sender : obj) = 
     ... 

Как сказано, код не компилируется. Я пробовал разные варианты, но просто не могу заставить его работать. Любая помощь будет оценена по достоинству.

+1

Компилятор ясно говорит вам: 'dataChangedHandler', как ожидается, будет типа' OBJ -> unit'. Просто не заверните его в «EventHandler», это сработает. –

+0

@ fyodor-soikin Что было бы правильным синтаксисом в этом случае? Насколько я понимаю, я не могу просто использовать 'new obj (fun sender -> this.DataItems_DataChanged (sender))' – user6423491

+0

'new obj' создает экземпляр' obj', но вам нужно 'obj -> unit' , Это просто функция. –

ответ

1

Компилятор четко сообщает вам: dataChangedHandler, как ожидается, будет иметь тип obj -> unit, который является просто функцией.

Просто не обернуть его в EventHandler, он будет работать:

let dataChangedHandler = fun (sender: obj) -> this.DataItems_DataChanged(sender) 
Смежные вопросы