private void LoadGroups() { ThreadHelper.ThrowIfNotOnUIThread(); _changeSubscription?.Dispose(); // Load presets for the current solution Groups = new TrulyObservableCollection <DocumentGroup>(LoadGroupsForSolution()); _changeSubscription = new CompositeDisposable { Observable.FromEventPattern <NotifyCollectionChangedEventArgs>(Groups, nameof(TrulyObservableCollection <DocumentGroup> .CollectionChanged)) .Subscribe(re => SaveGroupsForSolution()), Observable.FromEventPattern <PropertyChangedEventArgs>(Groups, nameof(TrulyObservableCollection <DocumentGroup> .CollectionItemChanged)) .Where(re => re.EventArgs.PropertyName == nameof(DocumentGroup.Name) || re.EventArgs.PropertyName == nameof(DocumentGroup.Files) || re.EventArgs.PropertyName == nameof(DocumentGroup.Positions) || re.EventArgs.PropertyName == nameof(DocumentGroup.Slot)) .Throttle(TimeSpan.FromSeconds(1)) .ObserveOnDispatcher() .Subscribe(re => SaveGroupsForSolution()) }; GroupsReset?.Invoke(this, EventArgs.Empty); }
private void LoadGroups() { _changeSubscription?.Dispose(); // Load presets for the current solution Groups = new TrulyObservableCollection <DocumentGroup>(LoadGroupsForSolution()); _changeSubscription = new CompositeDisposable { Observable.FromEventPattern <NotifyCollectionChangedEventArgs>(Groups, "CollectionChanged") .Subscribe(re => SaveGroupsForSolution()), Observable.FromEventPattern <PropertyChangedEventArgs>(Groups, "CollectionItemChanged") .Where(re => re.EventArgs.PropertyName == "Name" || re.EventArgs.PropertyName == "Slot") .Throttle(TimeSpan.FromSeconds(1)) .ObserveOnDispatcher() .Subscribe(re => SaveGroupsForSolution()) }; GroupsReset?.Invoke(this, EventArgs.Empty); }