свойство зависимости к наблюдаемому

Я поклонник 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?


person takayoshi    schedule 14.12.2012    source источник


Ответы (1)


Это фактически исправлено в >= ReactiveUI 4.0. Теперь все, что вы делаете, это:

// WhenAny now works on any object, will detect DependencyObject automatically
obj.WhenAny(x => x.ActiveEditor, x => x.Value)
   .Subscribe(/* ... */)
person Ana Betts    schedule 14.12.2012
comment
Павел, можно вас спросить? Почему вы удалили ObservableFromDP из ReactiveUI 4 вместо того, чтобы сделать его устаревшим? - person takayoshi; 14.12.2012
comment
Это не удалено, просто обобщено. WhenAny теперь работает с DependencyObjects и DependencyProperties, а не только с объектами ViewModel. Там тот же функционал, только название другое - person Ana Betts; 14.12.2012