Cómo conservar el estado de control dentro de los elementos de la pestaña en un Control de tabla

Soy un recién llegado a WPF, intentando construir un proyecto que sigue las recomendaciones del excelente artículo de Josh Smith que describeEl patrón de diseño Modelo-Vista-VistaModelo.

Utilizando el código de muestra de Josh como base, he creado una aplicación simple que contiene una serie de "espacios de trabajo", cada uno representado por una pestaña en un Control de pestañas. En mi aplicación, un área de trabajo es un editor de documentos que permite manipular un documento jerárquico mediante un control TreeView.

Aunque he logrado abrir múltiples espacios de trabajo y ver el contenido de su documento en el control TreeView enlazado, encuentro que TreeView "olvida" su estado al cambiar entre pestañas. Por ejemplo, si el TreeView en Tab1 está parcialmente expandido, se mostrará como completamente colapsado después de cambiar a Tab2 y regresar a Tab1. Este comportamiento parece aplicarse a todos los aspectos del estado de control para todos los controles.

Después de algunos experimentos, me he dado cuenta de que puedo preservar el estado dentro de un elemento de tabla vinculando explícitamente cada propiedad de estado de control a una propiedad dedicada en el ViewModel subyacente. Sin embargo, esto parece una gran cantidad de trabajo adicional, cuando simplemente quiero que todos mis controles recuerden su estado al cambiar entre espacios de trabajo.

Supongo que me estoy perdiendo algo simple, pero no estoy seguro de dónde buscar la respuesta. Cualquier orientación sería muy apreciada.

Gracias tim

Actualizar:

Según lo solicitado, intentaré publicar algún código que demuestre este problema. Sin embargo, dado que los datos que subyacen en TreeView son complejos, publicaré un ejemplo simplificado que muestra los mismos síntomas. Aquí está el XAML de la ventana principal:

<TabControl IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Path=Docs}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <ContentPresenter Content="{Binding Path=Name}" />
        </DataTemplate>
    </TabControl.ItemTemplate>

    <TabControl.ContentTemplate>
        <DataTemplate>
            <view:DocumentView />
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

El XAML anterior se enlaza correctamente con una colección observable de DocumentViewModel, por lo que cada miembro se presenta a través de un DocumentView.

Para simplificar este ejemplo, quité el TreeView (mencionado anteriormente) del DocumentView y lo reemplacé con un TabControl que contiene 3 pestañas fijas:

<TabControl>
    <TabItem Header="A" />
    <TabItem Header="B" />
    <TabItem Header="C" />
</TabControl>

En este escenario, no hay enlace entre DocumentView y DocumentViewModel. Cuando se ejecuta el código, el TabControl interno no puede recordar su selección cuando se cambia el TabControl externo.

Sin embargo, si vinculo explícitamente la propiedad SelectedIndex de TabControl interno ...

<TabControl SelectedIndex="{Binding Path=SelectedDocumentIndex}">
    <TabItem Header="A" />
    <TabItem Header="B" />
    <TabItem Header="C" />
</TabControl>

... a una propiedad ficticia correspondiente en el DocumentViewModel ...

public int SelecteDocumentIndex { get; set; }

... la pestaña interior es capaz de recordar su selección.

Entiendo que puedo resolver mi problema de manera efectiva aplicando esta técnica a cada propiedad visual de cada control, pero espero que haya una solución más elegante.

Respuestas a la pregunta(6)

Su respuesta a la pregunta