2

私はReactiveExtensionのファンであり、特に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

これは実際には>=ReactiveUI4.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 に答える