Hallo,
da du von "Mainwindow" sprichst, gehen denke ich mal alle davon aus, dass du WPF benutzt und nicht WinForms. Ich weiß nicht wie gut du dich in WPF auskennst und wie stark du die UI vom C# Code abkapseln möchtest. Für einfache Anwendungen könnte man auch einfach die Instanz des UserControls behalten und es einfach nur aus dem Grid entfernen. Du hast dann z.B. zwei Listen: eine für die UserControls die momentan angezeigt werden und eine Liste für die, die schon mal angezeigt wurden, aber wieder entfernt wurden. Wenn du nun wieder ein UserControl hinzufügen willst, prüfst du zuerst, ob ein UserControl in der zweiten Liste ist. Wenn ja, schiebst du es in die andere Liste und fügst es wieder dem Grid hinzu.
Bei dieser Lösung sind Code und UI wieder etwas verflochten, was eigentlich kein guter Stil für WPF ist. Aber meiner Meinung nach ist das MVVM Pattern gerade für kleinere Projekte und Anfänger unnötig.
_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler