我很喜欢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?
答案 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(/* ... */)