From 9b0aff8cc1c0a1ed18333355459394aee75b8268 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 23 Jun 2018 01:14:49 +0200 Subject: [PATCH] Use LightweightObservableBase in TypeNameAndClassSelector --- .../Styling/TypeNameAndClassSelector.cs | 32 ++++--------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/src/Avalonia.Styling/Styling/TypeNameAndClassSelector.cs b/src/Avalonia.Styling/Styling/TypeNameAndClassSelector.cs index 5d48496e8c..93d4e14f27 100644 --- a/src/Avalonia.Styling/Styling/TypeNameAndClassSelector.cs +++ b/src/Avalonia.Styling/Styling/TypeNameAndClassSelector.cs @@ -4,12 +4,10 @@ using System; using System.Collections.Generic; using System.Collections.Specialized; -using System.Reactive; -using System.Reactive.Disposables; -using System.Reactive.Linq; using System.Reflection; using System.Text; using Avalonia.Collections; +using Avalonia.Reactive; namespace Avalonia.Styling { @@ -200,10 +198,9 @@ namespace Avalonia.Styling return builder.ToString(); } - private class ClassObserver : IObservable + private class ClassObserver : LightweightObservableBase { readonly IList _match; - readonly List> _observers = new List>(); IAvaloniaReadOnlyList _classes; public ClassObserver(IAvaloniaReadOnlyList classes, IList match) @@ -212,34 +209,19 @@ namespace Avalonia.Styling _match = match; } - public IDisposable Subscribe(IObserver observer) - { - if (_observers.Count == 0) - { - _classes.CollectionChanged += ClassesChanged; - } + protected override void Deinitialize() => _classes.CollectionChanged -= ClassesChanged; + protected override void Initialize() => _classes.CollectionChanged += ClassesChanged; - _observers.Add(observer); + protected override void Subscribed(IObserver observer, bool first) + { observer.OnNext(GetResult()); - - return Disposable.Create(() => - { - _observers.Remove(observer); - if (_observers.Count == 0) - { - _classes.CollectionChanged -= ClassesChanged; - } - }); } private void ClassesChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.Action != NotifyCollectionChangedAction.Move) { - foreach (var observer in _observers) - { - observer.OnNext(GetResult()); - } + PublishNext(GetResult()); } }