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); }
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); }
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); }