2016-07-21 3 views
0

В настоящее время у меня есть эта общая реализация, наследуя от существующего базового класса, который обеспечивает INotifyPropertyChanged. Я не могу изменить этот базовый класс, но я хочу предоставить уведомления об изменении свойств также как Observable, поэтому я реализую интерфейс IReactiveNotifyPropertyChanged.Как реализовать IReactiveNotifyPropertyChanged в базовом классе, который alreay реализует INotifyPropertyChanged

Я нашел код, приведенный ниже (полученный с помощью процесса проб и ошибок), чтобы быть довольно вовлеченным, и задавался вопросом, можно ли это сделать более простым и сжатым способом.

Кроме того, я изо всех сил пытаюсь придумать идеи для подавления уведомлений. Есть предположения?

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; 
    } 
} 

ответ

0

Вы написали самую короткую часть кода для реализации ChangedChanging и наблюдаемых, что вы хотите достичь большего? :)

Так как вам нужно Changed, Changing, SuppressChangeNotifications, и, возможно, через месяц вы хотите что-то другое из ReactiveObject, лучшим решением было бы использовать ReactiveObject в качестве базового класса. Но если вы не можете сделать это, я предлагаю вам скачать исходный код reactiveui и принимать только те куски кода, которые вам нужны: https://github.com/reactiveui/ReactiveUI

Вы лучше не осуществлять определенные функции самостоятельно , Создатели структуры рассмотрели множество ошибок и проблем, поэтому их код, безусловно, более тверд в том, что я или вы можете сами производить (если только мы не гений).

Смежные вопросы