2

我是 Reactive Extension 的粉丝,尤其是 ReactiveUI 我在其他解决方案的项目中拥有 DP,而不是我的。我想将其转换为包含此 DP 的可观察类是内部的并从 DependencyObject 派生,因此我不能使用 Class.ObservableFromDP 因为类必须从 FrameworkElement 派生

我有这个解决方案

public static IObservable<T> ToObservable<T>(this DependencyObject dependencyObject, DependencyProperty property)
    {
        return Observable.Create<T>(o =>
                                        {
                                            var des = DependencyPropertyDescriptor.FromProperty(property,
                                                                                                dependencyObject.
                                                                                                    GetType());
                                            var eh =
                                                new EventHandler(
                                                    (s, e) => o.OnNext((T) des.GetValue(dependencyObject)));
                                            des.AddValueChanged(dependencyObject, eh);
                                            return () => des.RemoveValueChanged(dependencyObject, eh);
                                        });

但是目标类是内部的,我无法访问此类中的属性 DependencyProperty

我怎样才能从这个属性中获得 Observable

有没有什么方法

obj.ObservableFromDP(x=>x.ActiveEditor)处理不是从 FrameworkElement 派生的 obj?

4

1 回答 1

3

这实际上已在 >= ReactiveUI 4.0 中修复。现在你要做的就是:

// WhenAny now works on any object, will detect DependencyObject automatically
obj.WhenAny(x => x.ActiveEditor, x => x.Value)
   .Subscribe(/* ... */)
于 2012-12-14T09:11:05.830 回答