void FilterLimitedViewModels(IEnumerable <TViewModel> viewmodels, bool sorted = false) { notifying = true; bool filterApplied = false; if (Limitation?.Enabled ?? false) { int previousViewmodels = viewmodels.Count(); viewmodels = viewmodels.Except(StaticViewModels).Take(Limitation.Maximum); viewmodels = viewmodels.Union(StaticViewModels); filterApplied = viewmodels.Count() != previousViewmodels; } if (sorted || filterApplied) { LimitedViewModels?.Reset(viewmodels); } else { LimitedViewModels?.Replace(viewmodels); } notifying = false; }
protected override void DisposeManagedResources() { LimitedViewModels.IgnoreEvents = true; LimitedViewModels.CollectionChanged -= HandleViewModelsCollectionChanged; base.ViewModels.IgnoreEvents = true; base.ViewModels.CollectionChanged -= HandleBaseViewModelModelsCollectionChanged; base.DisposeManagedResources(); Limitation = null; if (LimitedViewModels != null && LimitedViewModels.Any()) { foreach (var viewModel in LimitedViewModels) { viewModel.Dispose(); } LimitedViewModels.Clear(); } LimitedViewModels = null; }
/// <summary> /// Gets the enumerator of the LimitedViewModels. This method is automatically called in a foreach. /// </summary> /// <returns>The enumerator.</returns> public override IEnumerator <TViewModel> GetEnumerator() { return(LimitedViewModels.GetEnumerator()); }