private void InitVirtualizationStrategy(VirtualizationStrategyDefinition definition)
        {
            if (definition == null)
            {
                throw new ArgumentNullException("VirtualizationStrategyDefinition");
            }

            this.RecycleAllItems();
            this.ClearReycledItems();

            if (this.virtualizationStrategyDefinition != null)
            {
                this.UpdateStrategyDefinitionPropertyChangedHandling(false);
                this.virtualizationStrategy.ResetOwner();
            }

            this.virtualizationStrategyDefinition = definition;
            this.virtualizationStrategy           = this.virtualizationStrategyDefinition.CreateStrategy();
            this.virtualizationStrategy.InitializeOwner(this);

            if (this.IsLoaded)
            {
                this.UpdateStrategyDefinitionPropertyChangedHandling(true);
            }

            this.ResetScrollViewer();
            this.InvalidateMeasure();
            this.InvalidateArrange();
            this.ScheduleAsyncBalance();
            this.BeginAsyncBalance();
        }
        internal virtual void OnVirtualizationStrategyDefinitionChanged(DependencyPropertyChangedEventArgs args)
        {
            VirtualizationStrategyDefinition definition = (VirtualizationStrategyDefinition)args.NewValue;

            this.InitVirtualizationStrategy(definition);
        }