void item_LayoutStateChangeCompleted(object sender, LayoutStateChangeEventArgs e)
        {
            if (e.NewState == LayoutState.Unloaded)
            {
                var item = sender as AnimatedLayoutControl;
                item.LayoutStateChangeCompleted -= new EventHandler <LayoutStateChangeEventArgs>(item_LayoutStateChangeCompleted);

                BaseItemsSource.Clear();
                VisualItems.Clear();

                isUnloading = false;
                var itemsToAdd = NewRequestedItems.ToArray();
                NewRequestedItems.Clear();
                foreach (var newItem in itemsToAdd)
                {
                    BaseItemsSource.Add(newItem);
                }
            }
        }
        void ObservableItems_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            switch (e.Action)
            {
            case NotifyCollectionChangedAction.Add:
                foreach (var item in e.NewItems)
                {
                    if (isUnloading)
                    {
                        NewRequestedItems.Add(item);
                    }
                    else
                    {
                        BaseItemsSource.Add(item);
                    }
                }
                break;

            case NotifyCollectionChangedAction.Reset:
                if (!IsVisible)
                {
                    BaseItemsSource.Clear();
                    VisualItems.Clear();
                    isUnloading = false;
                }
                else if (VisualItems.Count > 0)
                {
                    isUnloading = true;
                    AnimatedLayoutControl lastItem = null;
                    foreach (var item in VisualItems)
                    {
                        if ((lastItem == null) || (item.BeginTime > lastItem.BeginTime))
                        {
                            lastItem = item;
                        }
                        item.LayoutState = LayoutState.Unloaded;
                    }

                    lastItem.LayoutStateChangeCompleted += new EventHandler <LayoutStateChangeEventArgs>(item_LayoutStateChangeCompleted);
                }
                break;
            }
        }