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继承,但我不确定.任何关于正确方法的建议都是合理的.
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)
这似乎工作