You can't hold onto such API objects in your view model, your best option is to create your own versions that represent shallow copies. In the end what do you need to see in the UI to select an item (the name), how do you relate that to the actual view plan in the model, via UniqueId etc. So you need an object that holds the UniqueId and the ViewName.
Depending on the situation you also have to link the individual object to the particular model (document) it came from or re-create the view model when the model (document) is changed. The VM also has to update the view when the objects are deleted from Revit.
So in the MVVM pattern
The VM makes a request of Revit for the view plans
Revit returns view plans which VM converts into your object of Name, UniqueId
VM updates the view with those objects which could be implementing interfaces that represent contract of Name, UniqueId.
There is only really a benefit of this abstraction if your view is likely to be different things i.e. access from different places.
When people bring these patterns up (MVVM, MVC...) I'm never really sure they fully fit working with the Revit API. Those patterns are usually based on the model being one thing such as a products database. There is also the implication that access to such is continuous (although you could argue the same via IExternalEventHandler is possible with Revit).