public void Repro3()
            {
                var source = new ObservableCollection <int> {
                    1, 2, 3
                };
                var scheduler = new TestScheduler();
                var max       = 5;

                using (var trigger = new Subject <object>())
                {
                    // ReSharper disable once AccessToModifiedClosure
                    using (var view = new FilteredView <int>(source, x => x < max, TimeSpan.Zero, scheduler, leaveOpen: true, triggers: trigger))
                    {
                        using (var actual = view.SubscribeAll())
                        {
                            CollectionAssert.AreEqual(new[] { 1, 2, 3 }, view);
                            CollectionAssert.IsEmpty(actual);

                            max = 2;
                            trigger.OnNext(null);
                            scheduler.Start();
                            var expected = new List <EventArgs>
                            {
                                CachedEventArgs.CountPropertyChanged,
                                CachedEventArgs.IndexerPropertyChanged,
                                CachedEventArgs.NotifyCollectionReset,
                            };
                            CollectionAssert.AreEqual(new[] { 1 }, view);
                            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);

                            source.Clear();
                            view.Refresh();
                            scheduler.Start();
                            CollectionAssert.IsEmpty(view);
                            expected.AddRange(new EventArgs[]
                            {
                                CachedEventArgs.CountPropertyChanged,
                                CachedEventArgs.IndexerPropertyChanged,
                                Diff.CreateRemoveEventArgs(1, 0),
                            });
                            CollectionAssert.AreEqual(expected, actual, EventArgsComparer.Default);
                        }
                    }
                }
            }
Пример #2
0
            public async Task BindItemsSource()
            {
                var listBox = new ListBox();
                var source  = new ObservableCollection <int> {
                    1, 2, 3
                };

                using (var view = new FilteredView <int>(source, x => x == 2, TimeSpan.Zero, WpfSchedulers.Dispatcher, leaveOpen: true, triggers: new Subject <object>()))
                {
                    var binding = new Binding {
                        Source = view,
                    };
                    BindingOperations.SetBinding(listBox, ItemsControl.ItemsSourceProperty, binding);
                    view.Refresh();
                    await Application.Current.Dispatcher.SimulateYield();

                    CollectionAssert.AreEqual(new[] { 2 }, listBox.Items); // Filtered
                }
            }