protected virtual void OnLayoutStateChangeCompleted(object sender, LayoutStateChangeEventArgs args)
        {
            var threadSafeInstance = this.LayoutStateChangeCompleted;

            if (threadSafeInstance != null)
            {
                threadSafeInstance(this, args);
            }
        }
        void visualItem_LayoutStateChangeCompleted(object sender, LayoutStateChangeEventArgs e)
        {
            var visualItem = sender as AnimatedLayoutControl;

            if (e.NewState == LayoutState.Unloaded)
            {
                visualItem.LayoutStateChangeCompleted -= new EventHandler <LayoutStateChangeEventArgs>(visualItem_LayoutStateChangeCompleted);
                ItemsToRemove.Add(visualItem.DataContext);
            }
        }
        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);
                }
            }
        }