Подписка на нажатие кнопки в реактивных расширениях и WPF

#c# #wpf #system.reactive

#c# #wpf #system.reactive

Вопрос:

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

  var click = Observable.FromEvent<RoutedEventHandler,RoutedEventArgs>(h => btn.Click  = h,h=> btn.Click -= h);
  click.Window(n).Subscribe(window =>
  {

  });
  

этот код кажется нормальным в соответствии с некоторым руководством, которое я нашел, но он не работает с

 Cannot bind to the target method because its signature or security transparency is not compatible with that of the delegate type.
  

Я также обнаружил, что что-то подобное должно работать

щелчок переменной = наблюдаемый.FromEvent(btn, «Щелчок»);

но это не компилируется.

Комментарии:

1. Рассматривали ли вы возможность использования MVVM и привязки вашей кнопки к Command ? (а затем использовать Rx для подписки на это Command выполнение?)

2. Попробуйте использовать RxUI, чтобы устранить разрыв с rx. Такого рода кодирование противоречит лучшим практикам и быстро приведет к неуправляемому коду.

Ответ №1:

Вы не можете использовать, FromEvent если вы собираетесь использовать, RoutedEventHandler,RoutedEventArgs вы должны использовать FromEventPattern<RoutedEventHandler,RoutedEventArgs> , чтобы заставить это работать. FromEvent предназначен для нестандартных событий .NET.

 var click = Observable.FromEventPattern<RoutedEventHandler,RoutedEventArgs>(h => btn.Click  = h,h=> btn.Click -= h);
  click.Window(n).Subscribe(window =>
  {

  });