Как преобразовать событие WPF Button.Click в Observable с помощью Rx и F #

Я пытаюсь воспроизвести некоторый код C #, который создает IObservable из события Button.Click . Я хочу перенести этот код на F #.

Вот исходный код C #, который компилируется без ошибок:

Observable.FromEvent<RoutedEventHandler, RoutedEventArgs>(
                                    h => new RoutedEventHandler(h),
                                    h => btn.Click += h,
                                    h => btn.Click -= h))

Вот моя неудачная попытка сделать то же самое на F #:

Observable.FromEvent<RoutedEventHandler, RoutedEventArgs>(
            Func<EventHandler<RoutedEventArgs>, RoutedEventHandler>(fun h -> RoutedEventHandler(h)),
            Action<RoutedEventHandler>(fun h -> btn.Click.AddHandler h),
            Action<RoutedEventHandler>(fun h -> btn.Click.RemoveHandler h))

Все в порядке, кроме второй строки заявление.

Компилятор F # жалуется на забавный h -> RoutedEventHandler (h) , потому что

Как видите, он принимает в качестве параметров объект и RoutedEventArgs , так что компилятор F # действительно правильный.

Есть ли какое-то волшебство, которое компилятор C # делает за кулисами, чтобы заставить эту работу работать, чего не делает компилятор F #, или я просто что-то здесь упускаю?

В любом случае, как я могу заставить это работать в F #?

14
задан Thorsten Lorenz 27 February 2011 в 04:07
поделиться