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