我想将控件的 DataContext 作为 IObservable 获取。我试过这个:
Observable.FromEvent<DependencyPropertyChangedEventHandler,
DependencyPropertyChangedEventArgs>
(a => this.DataContextChanged += a, a => this.DataContextChanged -= a)
.Subscribe(e => MessageBox.Show(e.NewValue.ToString()));
编译得很好,但是在调用 Subscribe 时会抛出异常:错误绑定(bind)到目标方法。
我的猜测是这是因为 DependencyPropertyChangedEventArgs 不是从事件 args 继承的,但我不确定。任何有关正确方法的建议都将受到赞赏。
最佳答案
FromEvent 的其他重载之一允许您自己从方法创建委托(delegate)。允许您这样做:
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()));
这似乎有效
关于c# - Observable.FromEvent 可以与 DataContextChanged 一起使用吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7346688/