public void ReplaceTest()
        {
            ObservableCollection <TestClass> testCollection = new ObservableCollection <TestClass>()
            {
                new TestClass()
                {
                    IntProperty = 1, StringProperty = "C"
                },
                new TestClass()
                {
                    IntProperty = 2, StringProperty = "A"
                },
                new TestClass()
                {
                    IntProperty = 3, StringProperty = "D"
                },
                new TestClass()
                {
                    IntProperty = 4, StringProperty = "B"
                },
            };

            PagedCollectionView cv = new PagedCollectionView(testCollection);

            Assert.AreEqual("C", (cv[0] as TestClass).StringProperty);
            Assert.AreEqual("A", (cv[1] as TestClass).StringProperty);
            Assert.AreEqual("D", (cv[2] as TestClass).StringProperty);
            Assert.AreEqual("B", (cv[3] as TestClass).StringProperty);

            // replace first item
            testCollection[0] = new TestClass()
            {
                IntProperty = 5, StringProperty = "E"
            };

            // verify new data (still in same index)
            Assert.AreEqual("E", (cv[0] as TestClass).StringProperty);
            Assert.AreEqual("A", (cv[1] as TestClass).StringProperty);
            Assert.AreEqual("D", (cv[2] as TestClass).StringProperty);
            Assert.AreEqual("B", (cv[3] as TestClass).StringProperty);

            // now sort and page the data
            cv.PageSize = 2;
            cv.SortDescriptions.Add(new System.ComponentModel.SortDescription("StringProperty", System.ComponentModel.ListSortDirection.Ascending));

            // ----------------
            // |Page | 0  | 1  |
            // ----------------
            // | 0   | A  | B  | <---- Current Page
            // | 1   | D  | E  |
            Assert.AreEqual("A", (cv[0] as TestClass).StringProperty);
            Assert.AreEqual("B", (cv[1] as TestClass).StringProperty);

            // replace 'B', which is the 4th item in the collection
            testCollection[3] = new TestClass()
            {
                IntProperty = 6, StringProperty = "F"
            };

            // ----------------
            // |Page | 0  | 1  |
            // ----------------
            // | 0   | A  | D  | <---- Current Page
            // | 1   | E  | F  | (because of sorting/paging)
            Assert.AreEqual("A", (cv[0] as TestClass).StringProperty);
            Assert.AreEqual("D", (cv[1] as TestClass).StringProperty);
            cv.MoveToNextPage();
            Assert.AreEqual("E", (cv[0] as TestClass).StringProperty);
            Assert.AreEqual("F", (cv[1] as TestClass).StringProperty);
        }