public override object Process(ServiceResponse response)
        {
            this.ServiceError = null;
            if (response.IsSuccess)
            {
                if (response.InfoMessage == null || response.InfoMessage.ToLower() == "null")
                {
                    this.DataSource = null;
                    return(null);
                }

                object current         = null;
                var    pageIndex       = 0;
                var    currentPosition = 0;
                if (this.DataSource != null && this.DataSource.CurrentItem != null)
                {
                    current         = this.DataSource.CurrentItem;
                    pageIndex       = this.DataSource.PageIndex;
                    currentPosition = this.DataSource.CurrentPosition;
                }
                var ds = new PagedCollectionView(InfoExchange.DeConvert <IList>(response.InfoMessage, InfoExchange.SetingsKonwnTypesBinder));
                if (current != null)
                {
                    var item = ds.OfType <object>().Where(c => c.Equals(current)).FirstOrDefault();
                    if (item != null)
                    {
                        ds.MoveCurrentTo(item);
                    }
                    else
                    {
                        try
                        {
                            ds.MoveToPage(pageIndex);
                            ds.MoveCurrentToPosition(currentPosition);
                        }
                        catch (Exception)
                        {
                        }
                    }
                }
                this.DataSource = ds;
            }
            else
            {
                this.DataSource   = null;
                this.ServiceError = response.ExceptionMessage;
            }
            return(this.DataSource);
        }
Пример #2
0
        public void ItemsSource()
        {
            Type propertyType   = typeof(IEnumerable);
            bool expectGet      = true;
            bool expectSet      = true;
            bool hasSideEffects = true;

            DataGrid control = new DataGrid();

            TestPanel.Children.Add(control);
            Assert.IsNotNull(control);

            // Verify dependency property member
            FieldInfo fieldInfo = typeof(DataGrid).GetField("ItemsSourceProperty", BindingFlags.Static | BindingFlags.Public);

            Assert.AreEqual(typeof(DependencyProperty), fieldInfo.FieldType, "DataGrid.ItemsSourceProperty not expected type 'DependencyProperty'.");

            // Verify dependency property's value type
            DependencyProperty property = fieldInfo.GetValue(null) as DependencyProperty;

            Assert.IsNotNull(property);

            //


            // Verify dependency property CLR property member
            PropertyInfo propertyInfo = typeof(DataGrid).GetProperty("ItemsSource", BindingFlags.Instance | BindingFlags.Public);

            Assert.IsNotNull(propertyInfo, "Expected CLR property DataGrid.ItemsSource does not exist.");
            Assert.AreEqual(propertyType, propertyInfo.PropertyType, "DataGrid.ItemsSource not expected type 'IEnumerable'.");

            // Verify getter/setter access
            Assert.AreEqual(expectGet, propertyInfo.CanRead, "Unexpected value for propertyInfo.CanRead.");
            Assert.AreEqual(expectSet, propertyInfo.CanWrite, "Unexpected value for propertyInfo.CanWrite.");

            // Verify that we set what we get
            if (expectSet) // if expectSet == false, this block can be removed
            {
                control.SelectionChanged += new SelectionChangedEventHandler(control_SelectionChanged);

                ObservableCollection <int> data1 = new ObservableCollection <int> {
                    0, 1, 2, 3, 4, 5, 6, 7, 8, 9
                };
                ObservableCollection <string> data2 = new ObservableCollection <string> {
                    "zero", "one", "two"
                };
                ObservableCollection <double> data3 = new ObservableCollection <double> {
                    0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9
                };
                PagedCollectionView pcv1 = new PagedCollectionView(data1);
                PagedCollectionView pcv2 = new PagedCollectionView(data2);
                PagedCollectionView pcv3 = new PagedCollectionView(data3);

                this.EnqueueCallback(delegate
                {
                    control.ItemsSource = data1;
                });
                this.EnqueueYieldThread();

                this.EnqueueCallback(delegate
                {
                    Assert.AreEqual(data1, control.ItemsSource);
                    Assert.IsNull(control.SelectedItem, "No items should be selected by default if ItemsSource was not set to an ICollectionView");
                    Assert.AreEqual(-1, control.SelectedIndex, "No items should be selected by default if ItemsSource was not set to an ICollectionView");
                    Assert.AreEqual(0, control.CurrentColumnIndex, "The first cell should be current by default");
                    Assert.AreEqual(control.Columns[0], control.CurrentColumn, "The first cell should be current by default");

                    Assert.AreEqual(0, this._counter, "SelectionChanged should not have been raised yet");
                    Assert.IsNull(this._selectionChangedEventArgs, "SelectionChanged should not have been raised yet");

                    control.ItemsSource   = data2;
                    control.SelectedIndex = 1;

                    // Force a CollectionChanged.Reset by adding and removing a GroupDescription, in order to
                    // verify that resetting the collection while a SelectionChanged event is pending will still work correctly.
                    Assert.IsNotNull(control.DataConnection.CollectionView);
                    control.DataConnection.CollectionView.GroupDescriptions.Add(new PropertyGroupDescription("Length"));
                    control.DataConnection.CollectionView.GroupDescriptions.Clear();
                });
                this.EnqueueYieldThread();

                this.EnqueueCallback(delegate
                {
                    Assert.AreEqual(data2, control.ItemsSource);
                    Assert.AreEqual(data2[1], control.SelectedItem, "Setting SelectedIndex after ItemsSource did not work");
                    Assert.AreEqual(1, control.SelectedIndex, "Setting SelectedIndex after ItemsSource did not work");
                    Assert.IsNotNull(this._selectionChangedEventArgs, "SelectionChanged should have been raised");
                    Assert.AreEqual(1, this._selectionChangedEventArgs.AddedItems.Count);
                    Assert.AreEqual(0, control.CurrentColumnIndex, "The first cell should be current by default");
                    Assert.AreEqual(control.Columns[0], control.CurrentColumn, "The first cell should be current by default");

                    Assert.AreEqual(1, this._counter, "SelectionChanged should have been raised");
                    Assert.IsNotNull(this._selectionChangedEventArgs, "SelectionChanged should have been raised");
                    Assert.IsNotNull(this._selectionChangedEventArgs.AddedItems);
                    Assert.AreEqual(1, this._selectionChangedEventArgs.AddedItems.Count, "A single item should have been added");
                    Assert.AreEqual(data2[1], this._selectionChangedEventArgs.AddedItems[0], "A single item should have been added");
                    Assert.IsNotNull(this._selectionChangedEventArgs.RemovedItems);
                    Assert.AreEqual(0, this._selectionChangedEventArgs.RemovedItems.Count, "No items should have been removed");

                    control.ItemsSource  = data3;
                    control.SelectedItem = data3[3];
                });
                this.EnqueueYieldThread();

                this.EnqueueCallback(delegate
                {
                    Assert.AreEqual(data3, control.ItemsSource);
                    Assert.AreEqual(data3[3], control.SelectedItem, "Setting SelectedItem after ItemsSource did not work");
                    Assert.AreEqual(3, control.SelectedIndex, "Setting SelectedItem after ItemsSource did not work");
                    Assert.AreEqual(0, control.CurrentColumnIndex, "The first cell should be current by default");
                    Assert.AreEqual(control.Columns[0], control.CurrentColumn, "The first cell should be current by default");

                    Assert.AreEqual(2, this._counter, "SelectionChanged should have been raised");
                    Assert.IsNotNull(this._selectionChangedEventArgs, "SelectionChanged should have been raised");
                    Assert.IsNotNull(this._selectionChangedEventArgs.AddedItems);
                    Assert.AreEqual(1, this._selectionChangedEventArgs.AddedItems.Count, "A single item should have been added");
                    Assert.AreEqual(data3[3], this._selectionChangedEventArgs.AddedItems[0], "A single item should have been added");
                    Assert.IsNotNull(this._selectionChangedEventArgs.RemovedItems);
                    Assert.AreEqual(1, this._selectionChangedEventArgs.RemovedItems.Count, "A single item should have been removed");
                    Assert.AreEqual(data2[1], this._selectionChangedEventArgs.RemovedItems[0], "A single item should have been removed");

                    control.ItemsSource = pcv1;
                });
                this.EnqueueYieldThread();

                this.EnqueueCallback(delegate
                {
                    Assert.AreEqual(pcv1, control.ItemsSource);
                    Assert.AreEqual(pcv1[0], control.SelectedItem, "First item was not selected when setting ItemsSource to an ICollectionView");
                    Assert.AreEqual(0, control.SelectedIndex, "First item was not selected when setting ItemsSource to an ICollectionView");
                    Assert.AreEqual(0, control.CurrentColumnIndex, "The first cell should be current by default");
                    Assert.AreEqual(control.Columns[0], control.CurrentColumn, "The first cell should be current by default");

                    Assert.AreEqual(3, this._counter, "SelectionChanged should have been raised");
                    Assert.IsNotNull(this._selectionChangedEventArgs, "SelectionChanged should have been raised");
                    Assert.IsNotNull(this._selectionChangedEventArgs.AddedItems);
                    Assert.AreEqual(1, this._selectionChangedEventArgs.AddedItems.Count, "A single item should have been added");
                    Assert.AreEqual(pcv1[0], this._selectionChangedEventArgs.AddedItems[0], "A single item should have been added");
                    Assert.IsNotNull(this._selectionChangedEventArgs.RemovedItems);
                    Assert.AreEqual(1, this._selectionChangedEventArgs.RemovedItems.Count, "A single item should have been removed");
                    Assert.AreEqual(data3[3], this._selectionChangedEventArgs.RemovedItems[0], "A single item should have been removed");

                    pcv2.MoveCurrentToPosition(1);
                    control.ItemsSource = pcv2;
                });
                this.EnqueueYieldThread();

                this.EnqueueCallback(delegate
                {
                    Assert.AreEqual(pcv2, control.ItemsSource);
                    Assert.AreEqual(pcv2[1], control.SelectedItem, "CollectionView.CurrentItem was not selected by default");
                    Assert.AreEqual(1, control.SelectedIndex, "CollectionView.CurrentItem was not selected by default");
                    Assert.AreEqual(0, control.CurrentColumnIndex, "The first cell should be current by default");
                    Assert.AreEqual(control.Columns[0], control.CurrentColumn, "The first cell should be current by default");

                    Assert.AreEqual(4, this._counter, "SelectionChanged should have been raised");
                    Assert.IsNotNull(this._selectionChangedEventArgs, "SelectionChanged should have been raised");
                    Assert.IsNotNull(this._selectionChangedEventArgs.AddedItems);
                    Assert.AreEqual(1, this._selectionChangedEventArgs.AddedItems.Count, "A single item should have been added");
                    Assert.AreEqual(pcv2[1], this._selectionChangedEventArgs.AddedItems[0], "A single item should have been added");
                    Assert.IsNotNull(this._selectionChangedEventArgs.RemovedItems);
                    Assert.AreEqual(1, this._selectionChangedEventArgs.RemovedItems.Count, "A single item should have been removed");
                    Assert.AreEqual(pcv1[0], this._selectionChangedEventArgs.RemovedItems[0], "A single item should have been removed");

                    pcv3.MoveCurrentToPosition(-1);
                    control.ItemsSource = pcv3;
                });
                this.EnqueueYieldThread();

                this.EnqueueCallback(delegate
                {
                    Assert.AreEqual(pcv3, control.ItemsSource);
                    Assert.IsNull(control.SelectedItem, "No items should be selected if CollectionView.CurrentItem is null");
                    Assert.AreEqual(-1, control.SelectedIndex, "No items should be selected if CollectionView.CurrentItem is null");
                    Assert.AreEqual(-1, control.CurrentColumnIndex, "There should be no current cell if CollectionView.CurrentItem is null");
                    Assert.IsNull(control.CurrentColumn, "There should be no current cell if CollectionView.CurrentItem is null");

                    Assert.AreEqual(5, this._counter, "SelectionChanged should have been raised");
                    Assert.IsNotNull(this._selectionChangedEventArgs, "SelectionChanged should have been raised");
                    Assert.IsNotNull(this._selectionChangedEventArgs.AddedItems);
                    Assert.AreEqual(0, this._selectionChangedEventArgs.AddedItems.Count, "No items should have been added");
                    Assert.IsNotNull(this._selectionChangedEventArgs.RemovedItems);
                    Assert.AreEqual(1, this._selectionChangedEventArgs.RemovedItems.Count, "A single item should have been removed");
                    Assert.AreEqual(pcv2[1], this._selectionChangedEventArgs.RemovedItems[0], "A single item should have been removed");

                    control.ProcessDownKey();
                });
                this.EnqueueYieldThread();

                this.EnqueueCallback(delegate
                {
                    Assert.AreEqual(pcv3[0], control.SelectedItem, "The first item should be selected after pressing the down key");
                    Assert.AreEqual(0, control.SelectedIndex, "The first item should be selected after pressing the down key");
                    Assert.AreEqual(0, control.CurrentColumnIndex, "The first cell should be current after pressing the down key");
                    Assert.AreEqual(control.Columns[0], control.CurrentColumn, "The first cell should be current after pressing the down key");

                    Assert.AreEqual(6, this._counter, "SelectionChanged should have been raised");
                    Assert.IsNotNull(this._selectionChangedEventArgs, "SelectionChanged should have been raised");
                    Assert.IsNotNull(this._selectionChangedEventArgs.AddedItems);
                    Assert.AreEqual(1, this._selectionChangedEventArgs.AddedItems.Count, "A single item should have been added");
                    Assert.AreEqual(pcv3[0], this._selectionChangedEventArgs.AddedItems[0], "A single item should have been added");
                    Assert.IsNotNull(this._selectionChangedEventArgs.RemovedItems);
                    Assert.AreEqual(0, this._selectionChangedEventArgs.RemovedItems.Count, "No items should have been removed");
                });
            }

            // Verify dependency property callback
            if (hasSideEffects)
            {
                MethodInfo methodInfo = typeof(DataGrid).GetMethod("OnItemsSourcePropertyChanged", BindingFlags.Static | BindingFlags.NonPublic);
                Assert.IsNotNull(methodInfo, "Expected DataGrid.ItemsSource to have static, non-public side-effect callback 'OnItemsSourcePropertyChanged'.");

                //
            }
            else
            {
                MethodInfo methodInfo = typeof(DataGrid).GetMethod("OnItemsSourcePropertyChanged", BindingFlags.Static | BindingFlags.NonPublic);
                Assert.IsNull(methodInfo, "Expected DataGrid.ItemsSource NOT to have static side-effect callback 'OnItemsSourcePropertyChanged'.");
            }

            this.EnqueueTestComplete();
        }