One way to get around this would probably be to encapsulate a dictionary, then you can implement notifying interfaces and control the access to the dictionary, i.e. if someone uses the brackets to set a value you can set the value of the internal dictionary and raise the notification.