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); }
protected override IVirtualizedElement <RadListDataItem> UpdateElement( int position, RadListDataItem data) { object elementContext = this.GetElementContext(); IVirtualizedElement <RadListDataItem> element; if (position < this.Children.Count) { element = (IVirtualizedElement <RadListDataItem>) this.Children[position]; if (this.ElementProvider.ShouldUpdate(element, data, elementContext)) { if (position < this.Children.Count - 1) { IVirtualizedElement <RadListDataItem> child = (IVirtualizedElement <RadListDataItem>) this.Children[position + 1]; if (child.Data.Equals((object)data)) { this.Children.Move(position + 1, position); child.Synchronize(); return(child); } } if (this.ElementProvider.IsCompatible(element, data, elementContext)) { element.Detach(); element.Attach(data, elementContext); } else { int compatibleElement = this.FindCompatibleElement(position, data); if (compatibleElement > position) { this.Children.Move(compatibleElement, position); element = (IVirtualizedElement <RadListDataItem>) this.Children[position]; element.Detach(); element.Attach(data, elementContext); } else { position = Math.Min(position, this.Children.Count); element = this.ElementProvider.GetElement(data, elementContext); this.InsertElement(position, element, data); } } } } else { position = Math.Min(position, this.Children.Count); element = this.ElementProvider.GetElement(data, elementContext); this.InsertElement(position, element, data); } return(element); }