コード例 #1
0
            public void Replace(int index, int oldCount, int newCount, bool reset)
            {
                for (int i = 0; i < oldCount; i++)
                {
                    Inner.RemoveAt(index);
                }

                for (int i = 0; i < newCount; i++)
                {
                    Inner.Insert(index, (10000 + i).ToString());
                }

                if (reset)
                {
                    OnItemsSourceChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
                }
                else
                {
                    OnItemsSourceChanged(CollectionChangeEventArgsConverters.CreateNotifyArgs(
                                             NotifyCollectionChangedAction.Replace,
                                             oldStartingIndex: index,
                                             oldItemsCount: oldCount,
                                             newStartingIndex: index,
                                             newItemsCount: newCount));
                }
            }
コード例 #2
0
        public void CanCreateFromIObservableVector()
        {
            RunOnUIThread.Execute(() =>
            {
                var data       = new WinRTObservableVector(Enumerable.Range(0, 100).Select(i => string.Format("Item #{0}", i)));
                var dataSource = new InspectingDataSource(data);
                var recorder   = new CollectionChangeRecorder(dataSource);
                Verify.AreEqual(100, dataSource.Count);
                Verify.AreEqual("Item #4", (string)dataSource.GetAt(4));
                Verify.IsFalse(dataSource.HasKeyIndexMapping);

                data.Insert(4, "Inserted Item");
                data.RemoveAt(7);
                data[15] = "Replaced Item";
                data.Clear();

                VerifyRecordedCollectionChanges(
                    expected: new NotifyCollectionChangedEventArgs[]
                {
                    CollectionChangeEventArgsConverters.CreateNotifyArgs(NotifyCollectionChangedAction.Add, -1, 0, 4, 1),
                    CollectionChangeEventArgsConverters.CreateNotifyArgs(NotifyCollectionChangedAction.Remove, 7, 1, -1, 0),
                    CollectionChangeEventArgsConverters.CreateNotifyArgs(NotifyCollectionChangedAction.Replace, 15, 1, 15, 1),
                    CollectionChangeEventArgsConverters.CreateNotifyArgs(NotifyCollectionChangedAction.Reset, -1, 0, -1, 0),
                },
                    actual: recorder.RecordedArgs);
            });
        }
コード例 #3
0
            public void Reset()
            {
                try
                {
                    Owner.AppendAsyncEventMessage("SampleDataSource Reset");

                    Random rand = new Random(123);

                    for (int i = 0; i < 10; i++)
                    {
                        int from  = rand.Next(0, Inner.Count - 1);
                        var value = Inner[from];
                        Inner.RemoveAt(from);
                        int to = rand.Next(0, Inner.Count - 1);
                        Inner.Insert(to, value);
                    }

                    OnDataSourceChanged(CollectionChangeEventArgsConverters.CreateNotifyArgs(NotifyCollectionChangedAction.Reset, -1, -1, -1, -1));
                }
                catch (Exception ex)
                {
                    Owner.txtExceptionReport.Text = ex.ToString();
                    Owner.lstScrollerEvents.Items.Add(ex.ToString());
                }
            }
コード例 #4
0
            public void Remove(int index, int count, bool reset)
            {
                try
                {
                    Owner.AppendAsyncEventMessage("SampleDataSource Remove OldIndex=" + index + ", OldCount=" + count + ", Reset=" + reset);

                    for (int i = 0; i < count; i++)
                    {
                        Inner.RemoveAt(index);
                    }

                    if (reset)
                    {
                        OnDataSourceChanged(CollectionChangeEventArgsConverters.CreateNotifyArgs(NotifyCollectionChangedAction.Reset, -1, -1, -1, -1));
                    }
                    else
                    {
                        OnDataSourceChanged(CollectionChangeEventArgsConverters.CreateNotifyArgs(
                                                NotifyCollectionChangedAction.Remove,
                                                oldStartingIndex: index,
                                                oldItemsCount: count,
                                                newStartingIndex: -1,
                                                newItemsCount: 0));
                    }
                }
                catch (Exception ex)
                {
                    Owner.txtExceptionReport.Text = ex.ToString();
                    Owner.lstScrollerEvents.Items.Add(ex.ToString());
                }
            }
コード例 #5
0
 private static NotifyCollectionChangedEventArgs Clone(NotifyCollectionChangedEventArgs args)
 {
     return(CollectionChangeEventArgsConverters.CreateNotifyArgs(
                args.Action,
                args.OldStartingIndex,
                args.OldItems == null ? -1 : args.OldItems.Count,
                args.NewStartingIndex,
                args.NewItems == null ? -1 : args.NewItems.Count));
 }
コード例 #6
0
        private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            var args = CollectionChangeEventArgsConverters.CreateNotifyArgs(
                e.Action,
                e.OldStartingIndex,
                e.OldItems == null ? -1 : e.OldItems.Count,
                e.NewStartingIndex,
                e.NewItems == null ? -1 : e.NewItems.Count);

            OnItemsSourceChanged(args);
        }
コード例 #7
0
            public void Remove(int index, int count)
            {
                for (int i = 0; i < count; i++)
                {
                    Inner.RemoveAt(index);
                }

                OnDataSourceChanged(CollectionChangeEventArgsConverters.CreateNotifyArgs(
                                        NotifyCollectionChangedAction.Remove,
                                        oldStartingIndex: index,
                                        oldItemsCount: count,
                                        newStartingIndex: -1,
                                        newItemsCount: 0));
            }
コード例 #8
0
            public void Insert(int index, int count)
            {
                for (int i = 0; i < count; i++)
                {
                    Inner.Insert(index + i, string.Format("ItemI #{0}", Inner.Count));
                }

                OnDataSourceChanged(CollectionChangeEventArgsConverters.CreateNotifyArgs(
                                        NotifyCollectionChangedAction.Add,
                                        oldStartingIndex: -1,
                                        oldItemsCount: 0,
                                        newStartingIndex: index,
                                        newItemsCount: count));
            }
コード例 #9
0
            public void Replace(int index, int oldCount, int newCount, bool reset)
            {
                try
                {
                    Owner.AppendAsyncEventMessage("SampleDataSource Replace OldIndex=" + index + ", OldCount=" + oldCount + ", NewCount=" + newCount + ", Reset=" + reset);

                    for (int i = 0; i < oldCount; i++)
                    {
                        Inner.RemoveAt(index);
                    }

                    for (int i = 0; i < newCount; i++)
                    {
                        switch (Owner.cmbItemHeightMode.SelectedIndex)
                        {
                        case 0:     // Random
                            Random rand = new Random(123);
                            Inner.Insert(index, new DataItem(string.Format("ItemR #{0}", Inner.Count), 100 + rand.Next(0, 200)));
                            break;

                        case 1:     // Increasing
                            Inner.Insert(index, new DataItem(string.Format("ItemR #{0}", Inner.Count), 100 + i * 10));
                            break;

                        case 2:     // Constant
                            Inner.Insert(index, new DataItem(string.Format("ItemR #{0}", Inner.Count), 100));
                            break;
                        }
                    }

                    if (reset)
                    {
                        OnDataSourceChanged(CollectionChangeEventArgsConverters.CreateNotifyArgs(NotifyCollectionChangedAction.Reset, -1, -1, -1, -1));
                    }
                    else
                    {
                        OnDataSourceChanged(CollectionChangeEventArgsConverters.CreateNotifyArgs(
                                                NotifyCollectionChangedAction.Replace,
                                                oldStartingIndex: index,
                                                oldItemsCount: oldCount,
                                                newStartingIndex: index,
                                                newItemsCount: newCount));
                    }
                }
                catch (Exception ex)
                {
                    Owner.txtExceptionReport.Text = ex.ToString();
                    Owner.lstScrollerEvents.Items.Add(ex.ToString());
                }
            }
コード例 #10
0
            public void Insert(int index, int count, bool reset)
            {
                for (int i = 0; i < count; i++)
                {
                    Inner.Insert(index + i, (1000 + i).ToString());
                }

                if (reset)
                {
                    OnItemsSourceChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
                }
                else
                {
                    OnItemsSourceChanged(CollectionChangeEventArgsConverters.CreateNotifyArgs(
                                             NotifyCollectionChangedAction.Add,
                                             oldStartingIndex: -1,
                                             oldItemsCount: 0,
                                             newStartingIndex: index,
                                             newItemsCount: count));
                }
            }
コード例 #11
0
            public void Move(int oldIndex, int newIndex, int count, bool reset)
            {
                var items = Inner.GetRange(oldIndex, count);

                Inner.RemoveRange(oldIndex, count);
                Inner.InsertRange(newIndex, items);

                if (reset)
                {
                    OnItemsSourceChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
                }
                else
                {
                    OnItemsSourceChanged(CollectionChangeEventArgsConverters.CreateNotifyArgs(
                                             NotifyCollectionChangedAction.Move,
                                             oldStartingIndex: oldIndex,
                                             oldItemsCount: count,
                                             newStartingIndex: newIndex,
                                             newItemsCount: count));
                }
            }
コード例 #12
0
            public void Remove(int index, int count, bool reset)
            {
                for (int i = 0; i < count; i++)
                {
                    Inner.RemoveAt(index);
                }

                if (reset)
                {
                    OnItemsSourceChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
                }
                else
                {
                    OnItemsSourceChanged(CollectionChangeEventArgsConverters.CreateNotifyArgs(
                                             NotifyCollectionChangedAction.Remove,
                                             oldStartingIndex: index,
                                             oldItemsCount: count,
                                             newStartingIndex: -1,
                                             newItemsCount: 0));
                }
            }