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