Observable.FromEvent可以与DataContextChanged一起使用

For*_*say 3 c# wpf system.reactive

我想将控件的DataContext作为IObservable.我试过这个:

Observable.FromEvent<DependencyPropertyChangedEventHandler,
     DependencyPropertyChangedEventArgs>
     (a => this.DataContextChanged += a, a => this.DataContextChanged -= a)
     .Subscribe(e => MessageBox.Show(e.NewValue.ToString()));
Run Code Online (Sandbox Code Playgroud)

哪个编译很好,但在调用Subscribe时它会抛出异常:绑定到目标方法的错误.

我的猜测是因为DependencyPropertyChangedEventArgs不会从事件args继承,但我不确定.任何关于正确方法的建议都是合理的.

For*_*say 5

FromEvent的其他重载之一允许您自己从方法创建委托.允许你这样做:

Observable.FromEvent
    <DependencyPropertyChangedEventHandler, DependencyPropertyChangedEventArgs>
    (a => new DependencyPropertyChangedEventHandler(
        new Action<object, DependencyPropertyChangedEventArgs>((s, e) => a(e))),
        h => this.DataContextChanged += h, h => this.DataContextChanged -= h)
        .Subscribe(e => MessageBox.Show(e.NewValue.ToString()));
Run Code Online (Sandbox Code Playgroud)

这似乎工作