I had asked a question about mapping multiple view models to a single view ([here](https://stackoverflow.com/questions/6557919/wpf-mvvm-and-view-inheritance)). I got some good answers but I am still having some trouble applying what I learned there to my particular case.

A brief recap: I want to create a base ItemViewModelBase class that exposes properties that my view will bind to. Then I will create two specific view models, PeopleViewModel and CarsViewModel. Both of these inherit from ItemViewModelBase and implement the appropriate properties. Now, I want to be able to create a single view that will display the appropriate info based on which view model it is bound to. Since both the PeopleViewModel and CarsViewModel expose the same properties and I want the view to look the same for both of these, I only need one view.

One of the answers in my previous question suggested using a DataTemplate:

```
<DataTemplate DataType="{x:Type ItemViewModelBase}">
   //some user control
</DataTemplate>

```

I am new to using DataTemplates with MVVM (and MVVM in general) so I have a few questions:

Right now ItemViewModelBase is an abstract class and I defined the appropriate properties (ItemName, Items, etc.). My Items property is an ObservableCollection: 

```
public virtual ObservableCollection<???> Items { get; set; }

```

* What would I put as the collection type? The classes that derive from this base class will have different lists (Person, Car). Is the base view model the right place to put the property? I do want all of the derived classes to implement it so it seems so. ANd it doesn't make sense to have Person and Car extend some base object.
* Let's say I do not need any customization of my views. I would only need one View in that case. It is not clear how I would set this up. Should I create a DataTemplate for ItemViewModelBase and a single view (user control) to represent it? Right now I use Unity to register my view models and when the view is created, the view model gets injected in the view. How would I differentiate between the different view models when I try to create the view?

Basically, I don't know how to show the appropriate view when using DataTemplates. In my application right now I have a window that contains a tab control defined like this:

```
<Grid>
    <TabControl TabStripPlacement="Left" ItemsSource="{Binding TabItems}"/>
</Grid>

```

The TabControl's style contains the below setters:

```
<Setter Property="Header" Value="{Binding Header}"/>
<Setter Property="Content" Value="{Binding Content}"/>

```

TabItems is defined like so:

```
public ObservableCollection<ConfigTabItem> TabItems { get; set; }

TabItems.Add(new ConfigTabItem() { Header = "People", ResolveView = (Func<object>)(() => (PeopleView)Container.Resolve(typeof(PeopleView), "peopleView")) });
TabItems.Add(new ConfigTabItem() { Header = "Cars", ResolveView = (Func<object>)(() => (CarsView)ConfigurationModule.Container.Resolve(typeof(CarsView), "carsView")) });

```

So as it stands right now, I have separate view models and views for People and Cars, and whenever a tab is clicked, the appropriate view is resolved.

I want to change this setup to use the above mentioned base view model class and single view with DataTemplates.

Any sample code/sample would be greatly appreciated, showing a base view model class, some other view model classes extending that base view model, and then being able to show the appropriate view based on the view model (where there is only one generic view).