protected override IVirtualizedElement <ListViewDataItem> UpdateElement(int position, ListViewDataItem data)
        {
            IVirtualizedElement <ListViewDataItem> element = null;
            object elementContext = this.GetElementContext();

            if (position < this.Children.Count)
            {
                element = (IVirtualizedElement <ListViewDataItem>) this.Children[position];
                if (ElementProvider.ShouldUpdate(element, data, elementContext))
                {
                    if (position < this.Children.Count - 1)
                    {
                        IVirtualizedElement <ListViewDataItem> nextElement = (IVirtualizedElement <ListViewDataItem>) this.Children[position + 1];

                        if (nextElement.Data.Equals(data))
                        {
                            this.Children.Move(position + 1, position);
                            nextElement.Synchronize();
                            return(nextElement);
                        }
                    }

                    if (ElementProvider.IsCompatible(element, data, elementContext))
                    {
                        element.Detach();
                        element.Attach(data, elementContext);
                    }
                    else
                    {
                        int index = FindCompatibleElement(position, data);
                        if (index > position)
                        {
                            this.Children.Move(index, position);
                            element = (IVirtualizedElement <ListViewDataItem>) this.Children[position];
                            element.Detach();
                            element.Attach(data, elementContext);
                        }
                        else
                        {
                            position = Math.Min(position, this.Children.Count);
                            element  = ElementProvider.GetElement(data, elementContext);
                            InsertElement(position, element, data);
                        }
                    }
                }
            }
            else
            {
                position = Math.Min(position, this.Children.Count);
                element  = ElementProvider.GetElement(data, elementContext);
                InsertElement(position, element, data);
            }

            return(element);
        }
Example #2
0
        public IVirtualizedElement <int> GetElement(int data, object context)
        {
            bool flag = this.owner.IsRowExpanded(data);
            IVirtualizedElement <int> virtualizedElement = (IVirtualizedElement <int>)null;

            for (int index = this.cachedRows.Count - 1; index >= 0; --index)
            {
                if ((!flag && !this.cachedRows[index].IsChildViewInitialized || flag && this.cachedRows[index].IsChildViewInitialized) && this.cachedRows[index].IsCompatible(data, context))
                {
                    virtualizedElement = (IVirtualizedElement <int>) this.cachedRows[index];
                    this.cachedRows.RemoveAt(index);
                    break;
                }
            }
            if (virtualizedElement == null && this.cachedRows.Count > 10)
            {
                for (int index = this.cachedRows.Count - 1; index >= 0; --index)
                {
                    if (this.cachedRows[index].IsCompatible(data, context))
                    {
                        virtualizedElement = (IVirtualizedElement <int>) this.cachedRows[index];
                        this.cachedRows.RemoveAt(index);
                        break;
                    }
                }
            }
            if (virtualizedElement == null)
            {
                VirtualGridRowElement element;
                switch (data)
                {
                case -3:
                    element = this.CreateElement(data, typeof(VirtualGridFilterRowElement), context);
                    element.Initialize(this.owner);
                    element.Attach(-3, context);
                    break;

                case -2:
                    element = this.CreateElement(data, typeof(VirtualGridNewRowElement), context);
                    element.Initialize(this.owner);
                    element.Attach(-2, context);
                    break;

                case -1:
                    element = this.CreateElement(data, typeof(VirtualGridHeaderRowElement), context);
                    element.Initialize(this.owner);
                    element.Attach(-1, context);
                    break;

                default:
                    element = this.CreateElement(data, typeof(VirtualGridRowElement), context);
                    element.Initialize(this.owner);
                    break;
                }
                return((IVirtualizedElement <int>)element);
            }
            virtualizedElement.Attach(data, context);
            return(virtualizedElement);
        }
 protected virtual void InsertElement(int position, IVirtualizedElement <T> element, T data)
 {
     if (element != null)
     {
         ((RadElement)element).Visibility        = ElementVisibility.Visible;
         this.Children.checkForAlreadyAddedItems = false;
         this.Children.Insert(position, (RadElement)element);
         this.Children.checkForAlreadyAddedItems = true;
         element.Attach(data, GetElementContext());
     }
 }
        public virtual SizeF MeasureItem(Item item, SizeF availableSize)
        {
            IVirtualizedElement <Item> element = this.ViewElement.ElementProvider.GetElement(item, (object)null);
            RadElement radElement = (RadElement)element;

            this.SuspendLayout();
            this.Children.Add(radElement);
            element.Attach(item, (object)null);
            radElement.ResetLayout(true);
            radElement.Measure(availableSize);
            SizeF desiredSize = radElement.GetDesiredSize(false);

            this.Children.Remove(radElement);
            this.ViewElement.ElementProvider.CacheElement(element);
            element.Detach();
            this.ResumeLayout(false);
            return(desiredSize);
        }
Example #5
0
 public bool TryGetElementWithoutChildView(
     int data,
     object context,
     out IVirtualizedElement <int> element)
 {
     for (int index = this.cachedRows.Count - 1; index >= 0; --index)
     {
         if (!this.cachedRows[index].IsChildViewInitialized && this.cachedRows[index].IsCompatible(data, context))
         {
             element = (IVirtualizedElement <int>) this.cachedRows[index];
             this.cachedRows.RemoveAt(index);
             element.Attach(data, context);
             return(true);
         }
     }
     element = (IVirtualizedElement <int>)null;
     return(false);
 }