2012-12-14 74 views
1

我是Reactive Extension的粉絲,尤其是ReactiveUI 我在其他解決方案的項目中使用DP而不是我的DP。我想此轉換成含有這種可觀察到的DP類 是內部和自DependencyObject衍生因此我不能使用 Class.ObservableFromDP因爲類必須自FrameworkElement依賴屬性to observable

導出我有此溶液

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

是否有任何方法作爲

obj.ObservableFromDP(x=>x.ActiveEditor)對obj的工作不是從FrameworkElement派生的?

回答

2

這實際上固定在> = ReactiveUI 4.0中。現在你要做的是:

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

保羅,請問你?爲什麼從ReactiveUI 4中刪除ObservableFromDP而不是棄用? – takayoshi

+0

它不被刪除,只是泛化。 「WhenAny」現在可以與DependencyObjects和DependencyProperties一起使用,而不僅僅是ViewModel對象。同樣的功能在那裏,名字就不一樣了 –