【问题标题】:Subscribing to button click in Reactive Extensions and WPF订阅响应式扩展和 WPF 中的按钮单击
【发布时间】:2014-07-03 06:34:18
【问题描述】:

我有一个使用响应式扩展的 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.

我还发现这样的东西应该可以工作

var click = Observable.FromEvent(btn, "Click");

但这不会被编译。

【问题讨论】:

  • 您是否考虑过使用 MVVM 并将您的按钮绑定到 Command? (然后使用 Rx 订阅 Command 的执行?)
  • 尝试使用 RxUI 来弥补与 rx 的差距。这种编码方式违反了最佳实践,并且会很快导致无法维护的代码。

标签: c# wpf system.reactive


【解决方案1】:

如果您要使用RoutedEventHandler,RoutedEventArgs,则不能使用FromEvent,您必须使用FromEventPattern&lt;RoutedEventHandler,RoutedEventArgs&gt; 才能使其工作。 FromEvent 用于非标准 .NET 事件。

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

  });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多