コード例 #1
0
        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;
        }