我想将控件的 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/

10-12 06:06