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