Если класс фактически реализует интерфейс, но делает это явно и помещает модификаторы доступа в конкретную реализацию, все, что вам нужно сделать, это получить этот объект в контексте самого интерфейса, и вы можете использовать его. Например ..
ObservableCollection collection;
collection.PropertyChanged += ...;
Может произойти сбой, поскольку реализация PropertyChanged
защищена. Вы можете, однако, сделать это:
ObservableCollection collection;
INotifyPropertyChanged iproperty = collection;
iproperty.PropertyChanged += ...;
Это должно работать, поскольку вы имеете дело с объектом как экземпляром интерфейса, а не просто обращаетесь к членам интерфейса через определение класса.
Я не сделал ни одного WPF, поэтому понятия не имею, действительно ли ObservableCollection
реализует INotifyPropertyChanged
, но если это так, то это должно сработать.