如何在已经实现INotifyPropertyChanged的基类上实现IReaciveNotifyPropertyCha



目前,我通过从提供INotifyPropertyChanged的现有基类继承来实现这个通用实现。我不能更改这个基类,但我想同时作为Observable提供属性更改通知,所以我也实现了IReactiveNotifyPropertyChanged接口。

我发现下面的代码(通过反复尝试获得)非常复杂,我想知道是否可以用一种更简单、简洁的方式来完成。

此外,我正在努力想出抑制通知的想法。有什么想法吗?

public class MyReactiveClass<T> : PropertyChangeNotifyingBaseClass<T>, IReactiveNotifyPropertyChanged<T> 
    where T : class
{
    public MyReactiveClass()
    {
        Changed = Observable.FromEventPattern<PropertyChangedEventHandler, PropertyChangedEventArgs>
            (
            t => PropertyChanged += t, // add handler
            t => PropertyChanged -= t  // remove handler
            // conversion from EventPattern to ReactivePropertyChangedEventArgs
            ).Select(ev => new ReactivePropertyChangedEventArgs<T>(ev.Sender as T, ev.EventArgs.PropertyName));
        Changing = Observable.FromEventPattern<System.ComponentModel.PropertyChangingEventHandler, PropertyChangingEventArgs>
            (
            t => PropertyChanging += t, // add handler
            t => PropertyChanging -= t  // remove handler
            // conversion from EventPattern to ReactivePropertyChangedEventArgs
            ).Select(ev => new ReactivePropertyChangedEventArgs<T>(ev.Sender as T, ev.EventArgs.PropertyName));
    }
    public IObservable<IReactivePropertyChangedEventArgs<T>> Changing { get; }
    public IObservable<IReactivePropertyChangedEventArgs<T>> Changed { get; }
    public IDisposable SuppressChangeNotifications()
    {
        // how to deal with suppression of change notifications?!
        return Disposable.Empty; 
    }
}

您已经编写了尽可能短的代码来实现ChangedChanging可观察性,您还想实现什么?:)

由于您需要ChangedChangingSuppressChangeNotifications,也许一个月后您会想要ReactiveObject的其他内容,因此最好的解决方案是使用ReactiveObject作为基类。但如果你不能做到这一点,我建议你下载reactiveui的源代码,并只获取你需要的代码片段:https://github.com/reactiveui/ReactiveUI

你最好不要自己实现某些功能。该框架的创建者已经处理了许多错误和问题,因此他们的代码肯定比我或你自己制作的更可靠(除非我们是天才)。

相关内容

  • 没有找到相关文章

最新更新