One thing I'm not quite clear is that, in which thread all these functions should be called? Looks like this 'Add' may be called somewhere outside UI thread, if so, how about the other functions? Is it necessary to add some comments like "MUST IN UI THREAD"?
For example in the 'Remove' below, the records_ is not protected and there will be race conditions if accessed in multiple threads, so it look like should only be used in UI thread right?