#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 =>
{
});