【问题标题】:dependency property to observable可观察的依赖属性
【发布时间】:2012-12-14 08:59:34
【问题描述】:

我是 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=&gt;x.ActiveEditor) 正在处理不是从 FrameworkElement 派生的 obj?

【问题讨论】:

    标签: c# wpf system.reactive observable reactiveui


    【解决方案1】:

    这实际上已在 >= ReactiveUI 4.0 中修复。现在你要做的就是:

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

    【讨论】:

    • 保罗,我可以问你吗?为什么你从 ReactiveUI 4 中移除 ObservableFromDP 而不是弃用它?
    • 没有去掉,只是泛化了。 WhenAny 现在可以与 DependencyObjects 和 DependencyProperties 一起使用,而不仅仅是 ViewModel 对象。功能相同,只是名称不同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2014-07-27
    • 2021-11-22
    • 2017-01-11
    相关资源
    最近更新 更多