BaconographyWP8.Common.ReorderListBox.BuildRearrangeMap2 C# (CSharp) Method

BuildRearrangeMap2() private method

Collects information about the NEW items and their NEW positions after changes were made.
private BuildRearrangeMap2 ( RearrangeItemInfo map, int viewFirstIndex, int viewLastIndex ) : RearrangeItemInfo[]
map RearrangeItemInfo
viewFirstIndex int
viewLastIndex int
return RearrangeItemInfo[]
        private RearrangeItemInfo[] BuildRearrangeMap2(RearrangeItemInfo[] map,
            int viewFirstIndex, int viewLastIndex)
        {
            RearrangeItemInfo[] map2 = new RearrangeItemInfo[this.Items.Count];

            for (int i = 0; i < map2.Length; i++)
            {
                object item = this.Items[i];

                // Try to find the same item in the pre-rearrange info.
                RearrangeItemInfo info = map.FirstOrDefault(rii => rii.ToIndex < 0 && rii.Item == item);
                if (info == null)
                {
                    info = new RearrangeItemInfo()
                    {
                        Item = item,
                    };
                }

                info.ToIndex = i;

                // The precise item location is only important if it's within the view.
                if (viewFirstIndex <= i && i <= viewLastIndex)
                {
                    ReorderListBoxItem itemContainer = (ReorderListBoxItem)
                        this.ItemContainerGenerator.ContainerFromIndex(i);
                    if (itemContainer != null)
                    {
                        GeneralTransform itemTransform = itemContainer.TransformToVisual(this.rearrangeCanvas);
                        Point itemPoint = itemTransform.Transform(new Point(0, 0));
                        info.ToY = itemPoint.Y;
                        info.Height = itemContainer.RenderSize.Height;
                    }
                }

                map2[i] = info;
            }

            return map2;
        }