protected virtual async void ListUpdatedHandler(MessageBase <IList <TDomain> > messageBase) { // Might need to add new threads and main thread requests. IsLoading = true; var objects = await Resolver.Resolve <IListBusiness <TId, TDomain> >().GetAllAsync().ConfigureAwait(false); var deleteIds = 0; try { deleteIds = Observables.Select(x => x.Id).Except(objects.Select(x => x.Id)).Count(); } catch (Exception) { } var count = objects.Count + deleteIds; VerifyAndResetCountdown(count); var dispatcher = Resolver.Resolve <IExMainThreadDispatcher>(); foreach (var observable in Observables.Reverse()) { TObservable tmpObservable = observable; dispatcher.InvokeOnMainThread(() => { Observables.Remove(tmpObservable); SignalCde(); }); } foreach (var domainObject in objects) { if (ObservablesContainsId(domainObject.Id)) { var observable = Observables.First(x => x.Id.Equals(domainObject.Id)); DomainObservableMapper.UpdateDestination(domainObject, observable); SignalCde(); } else { var observable = DomainObservableMapper.Map(domainObject); dispatcher.InvokeOnMainThread(() => { Observables.InsertItem(observable); SignalCde(); }); } } if (SelectedObservable.IsTransient() && Observables.Any()) { ObservableSelectedMapper.UpdateDestination(Observables.First(), SelectedObservable); } IsLoading = false; }