依赖属性可观察

时间:2012-12-14 08:59:35

标签: c# wpf system.reactive observable reactiveui

我很喜欢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)处理obj而非派生自FrameworkElement?

1 个答案:

答案 0 :(得分:3)

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

// WhenAny now works on any object, will detect DependencyObject automatically
obj.WhenAny(x => x.ActiveEditor, x => x.Value)
   .Subscribe(/* ... */)