public void GroupingInListBoxTest()
        {
            ObservableCollection<TestClass> collection = new ObservableCollection<TestClass>()
            {
                new TestClass { IntProperty = 1, StringProperty = "A" },
                new TestClass { IntProperty = 2, StringProperty = "B" }, 
                new TestClass { IntProperty = 3, StringProperty = "A" },
                new TestClass { IntProperty = 4, StringProperty = "B" } 
            };

            PagedCollectionView cv = new PagedCollectionView(collection);

            ListBox lb = new ListBox();
            lb.ItemsSource = cv;

            this.CreateAsyncTask(
                lb,
                delegate
                {
                    Assert.AreEqual(4, lb.Items.Count);

                    cv.GroupDescriptions.Add(new PropertyGroupDescription("StringProperty"));

                    Assert.AreEqual(4, lb.Items.Count);
                    Assert.AreEqual("A", (lb.Items[0] as TestClass).StringProperty);
                    Assert.AreEqual("A", (lb.Items[1] as TestClass).StringProperty);
                    Assert.AreEqual("B", (lb.Items[2] as TestClass).StringProperty);
                    Assert.AreEqual("B", (lb.Items[3] as TestClass).StringProperty);

                    cv.PageSize = 3;
                    cv.MoveToPage(1);

                    Assert.AreEqual(1, lb.Items.Count);
                    Assert.AreEqual("B", (lb.Items[0] as TestClass).StringProperty);

                    TestClass newItem = cv.AddNew() as TestClass;
                    newItem.StringProperty = "A";
                    newItem.IntProperty = 5;

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

                    // ---------------------
                    // |Page | 0  | 1  | 2  |
                    // ---------------------
                    // | 0   | A  | A  |-A- |
                    // | 1   | B  | B  |    | <---- Current Page
                    Assert.AreEqual("B", (lb.Items[0] as TestClass).StringProperty);
                    Assert.AreEqual("B", (lb.Items[1] as TestClass).StringProperty);

                    cv.MoveToFirstPage();
                    Assert.AreEqual("A", (lb.Items[0] as TestClass).StringProperty);
                    Assert.AreEqual("A", (lb.Items[1] as TestClass).StringProperty);
                    Assert.AreEqual("A", (lb.Items[2] as TestClass).StringProperty);
                });

            EnqueueTestComplete();
        }