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