It seems that I need to initialize my datasets at the beginning of every command, since I don't have any objects that persist between commands (Or can I? If so, where do I initialize them?) Are ObservableCollections the way to go? Perhaps Dictionaries would be a good way to handle collections.
You will learn that you have to separate your code anyway, command class is just to call your functions (in your class, defined as shared/static). It sort of "translates" or "points" autocad commands to your class, and there are real functions. But your data is not there, it is in a separate collection, initialised at that "friend module" or init sub of application (check init and terminate subs in begginer examples).
Remeber also that xrecords can hold just about anything (IRC gig or two), so serialize your data into it, and do it at the same time you have now data into. This will kept is safe if power goes down, since autocad autosave option will work for you, and also, this solves undo/redo; and keep xdata filled only with app name, or id or something if you must.
You will have your class (for example in VB Friend Module), or some other type of class that will hold your data and is started at the init of your program (check first two subs in every example you can find, and you will see initalize and terminate subs)
There are also various ways to keep your data, play and see what fits you. (remember, app is once initalized ever, but I'm not sure so for command class, it may be per document)
As for ObservableCollection - i told you my mistakes. If you want to override parts of it, its pretty fast for putting, removing things and informing UI (especially if you work in WPF which is dead or not debateble). However, Dictionaries have their value in being quick to find item by key. Now, also to share some thoughts - as I've said, as an advice - you can build your collection/dictionary class whatever way you see fit, but dont play too much, because, the logical way to store your data in dict is by (key=ObjectID, <your data class>). And this works, but in the real world - how many times you need to access ONLY by key (objectid)? You will maybe need to sort your data by flow. Dictionary is not helping you here. Depends. So, if you follow this advice of mine - do not overinvest yourself in creating perfect data holder, since you are going to lose time, and yet only the real world will show you real problems. Then you will know.
But if you must choose something, as a start, choose dict. If you're part of a team, then it's a different story, since they will play with program logic, you play with CAD.