Возможно, нет необходимости специально устанавливать DataContext, если контакты отображаются в виде списка или что-то подобное.
Если для datacontext списка отображается свойство Contacts из MainViewModel, то для каждого элемента данных будет автоматически задан конкретный объект ContactViewModel, который может инициировать представление элементов с помощью элемента управления ContactView, предполагая, что определенный шаблон привязки были установлены ранее в документе.
Извините, у меня были проблемы с codeplex, и мне только что удалось получить документ для загрузки. Блок кода перед диаграммой подтверждает мое подозрение:
<Grid>
<ListBox ItemsSource="{Binding Contacts}">
<ListBox.ItemTemplate>
<DataTemplate>
<views:ContactView />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
Поскольку ListBox привязан к коллекции Contacts ObservableCollection, каждый ListItem будет иметь свой DataContext, установленный для конкретного объекта, с которым он связан. DataTemplate настроен для отображения каждого элемента в качестве элемента управления ContactView. Поэтому DataContext ContactView будет установлен на правильный объект Contact из коллекции, все это происходит за кулисами, и вам не нужно фактически устанавливать свойство самостоятельно.