There are a number of minor mistakes in you code. One is that you created a custom notifycation when changing the properties and it wants a string, so do that:
NotifyPropertyChanged("ImageName")
The only reason you need this class is the you want to know if a memeber gets an updated source, like a change in the Url etc. The ObservableCollection was made to fire an event when the collection gets updated, like adding an item and removing an item. It does however not fire an event when an item gets changed/updated.
And why did you make this class shared readonly?
Public Shared ReadOnly Property MyImages() As Images
A shared list is usually not needed, as the same would be seen by all new instances of the new class.
To make make the code work according to your specs, you only need the ImageData class, An ObservableCollection and not the other code. You could simply bind the observable collection to any list, grid or whatever.