WPF MVVM: configuración del contexto de datos de las vistas de pestaña

He experimentado un comportamiento vinculante extraño que se describeaquí. Solucioné muchos problemas y llegué a la conclusión de que el problema más probable radica en cómo configuro elDataContext de cada una de las vistas de la pestaña.

tengo unTabControl cuyoItemsSource está vinculado a una lista deViewModels.

MainView:
<TabControl ItemsSource="{Binding TabList}">
    <TabControl.Resources>
        <DataTemplate DataType="{x:Type vm:Tab1ViewModel}">
            <v:Tab1 />
        </DataTemplate>
    </TabControl.Resources>
...
</TabControl>

MainViewModel:
public ObservableCollection<TabViewModelBase> TabList { get; set; }
public MainViewModel()
{
    this.TabList = new ObservableCollection<TabViewModelBase>();

    // Tab1ViewModel is derived from TabViewModelBase
    this.TabList.Add(new Tab1ViewModel()); 
}

Entonces, ahora elMainViewModel tiene una lista deTabViewModelBase, que creo que es la forma correcta de MVVM de hacer esto. La vista (Tab1) paraTabViewModelBase se define usandoDataTemplate.

Aquí es donde está el problema:

Tab1:
<UserControl.Resources>
    <vm:Tab1ViewModel x:Key="VM" />
</UserControl.Resources>
<UserControl.DataContext>
    <StaticResourceExtension ResourceKey="VM" />
</UserControl.DataContext>

Creo que la mayoría de la gente haría esto también, pero ... Hay algoterriblemente equivocado con este enfoque!

EnMainViewModel, He instanciado manualmente unTab1ViewModel. EnMainView, SolíaDataTemplate para decirle a la Vista que use unTab1 cada vez que ve unTab1ViewModel. Eso significaMainView instanciaría un objeto deTab1 clase.

Ahora,Tab1 necesita suDataContext hacer vinculante con su propioTab1ViewModel, entonces usamosStaticResource para agregar unoTab1ViewModel, excepto que esta es una nueva instancia!

Necesito configurar elDataContext volviendo al original en el que hice una instanciaMainViewModel. Entonces, ¿cómo configuro elDataContext deTab1 dentroDataTemplate?

Respuestas a la pregunta(2)

Su respuesta a la pregunta