我是Reactive Extension的粉丝,尤其是ReactiveUI我在除我的项目以外的其他解决方案项目中有 DP。我想将其转换为可观察的包含此 DP 的类是内部的,派生自依赖对象,因此我无法使用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);
});
但是目标类是内部的,我无法访问此类中的属性依赖属性
如何从此属性获取可观察
有没有办法作为
obj.ObservableFromDP(x=>x.ActiveEditor)
处理不是从 FrameworkElement 派生的 obj 吗?
这实际上是在>= ReactiveUI 4.0中修复的。现在您要做的就是:
// WhenAny now works on any object, will detect DependencyObject automatically
obj.WhenAny(x => x.ActiveEditor, x => x.Value)
.Subscribe(/* ... */)