{"action":"opened","issue":{"url":"https://api.github.com/repos/dotnet/corefx/issues/970","labels_url":"https://api.github.com/repos/dotnet/corefx/issues/970/labels{/name}","comments_url":"https://api.github.com/repos/dotnet/corefx/issues/970/comments","events_url":"https://api.github.com/repos/dotnet/corefx/issues/970/events","html_url":"https://github.com/dotnet/corefx/issues/970","id":58313871,"number":970,"title":"ReadOnlyObservableCollection.CollectionChanged should be made public","user":{"login":"davkean","id":1103906,"avatar_url":"https://avatars.githubusercontent.com/u/1103906?v=3","gravatar_id":"","url":"https://api.github.com/users/davkean","html_url":"https://github.com/davkean","followers_url":"https://api.github.com/users/davkean/followers","following_url":"https://api.github.com/users/davkean/following{/other_user}","gists_url":"https://api.github.com/users/davkean/gists{/gist_id}","starred_url":"https://api.github.com/users/davkean/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davkean/subscriptions","organizations_url":"https://api.github.com/users/davkean/orgs","repos_url":"https://api.github.com/users/davkean/repos","events_url":"https://api.github.com/users/davkean/events{/privacy}","received_events_url":"https://api.github.com/users/davkean/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-02-20T06:05:49Z","updated_at":"2015-02-20T06:05:49Z","closed_at":null,"body":"The `ReadOnlyObservableCollection.CollectionChanged` event is protected, which is flawed, it prevents you from being able to observe changes to it without casting to `INotifyCollectionChanged`. \r\n\r\nI suspect the original thinking was because the collection is \"read-only\" it never changes - this is not correct. _Read-only_ in .NET means that the consumer has a read-only view over a collection (which is why we project `IReadOnlyList<T>` to `IVectorView<T>`), not that the contents are immutable and never change.\r\n\r\nWhile we've made `protected` members `public` in the past (such as `Exception.HResult`), this event was marked `virtual`, which while binary compatible, would be a source-breaking change for those that overrode it. I suspect very little have overridden it, but we may want to consider adding a new event with a different name such as `Changed`.\r\n"}}