public void ObservableSelect_ChangeItemsTest() { var collection = new ObservableCollection<TestObject>(); var values = collection.ObservableSelect(item => item.Value); var receivedEvents = new ObservableIndexer<NotifyCollectionChangedAction, int>(_ => 0); var expectedValues = new[] { 2, 3, 4 }; var expectedEvents = new[] { KeyValuePair(NotifyCollectionChangedAction.Replace, 3) }; var testObject1 = new TestObject { Value = 1 }; var testObject2 = new TestObject { Value = 2 }; var testObject3 = new TestObject { Value = 3 }; NotifyCollectionChangedEventHandler collectionChangedEventHandler = (sender, e) => { receivedEvents[e.Action] += 1; }; collection.AddRange(testObject1, testObject2, testObject3); values.CollectionChanged += collectionChangedEventHandler; foreach (var item in collection) { item.Value += 1; } Assert.IsTrue(receivedEvents.SequenceEqual(expectedEvents)); Assert.IsTrue(values.SequenceEqual(expectedValues)); }