2009-08-11 16 views
25

¿Cuál es el ejemplo más simple de enlace de los elementos de un TabControl a un ObservableCollection?Cómo vincular elementos de un TabControl a una colección observable en wpf?

El contenido de cada pestaña tendrá datos únicos, y de hecho estos datos tendrán colecciones observables propias a los componentes de los elementos.

Actualmente tengo un control de usuario, que me gustaría establecer como el contenido de cada pestaña tan pronto como se crea. También necesito establecer dinámicamente el contexto de datos de este nuevo control de usuario cuando se crea la pestaña. Entonces, esencialmente, me gustaría que la colección observable del tabcontrol contenga modelos que se correlacionan con los datos en cada pestaña.

Además de eso, ¡tengo que hacer todo esto sin violar MVVM en WPF! ¿Alguna ayuda?

¡Muy apreciado!

Respuesta

35

Ejemplo básico:

<Window.Resources> 

    <DataTemplate x:Key="templateForTheContent" DataType="{x:Type vm:TheViewModelType}"> 
     <v:YourUserControl/> 
    </DataTemplate> 

    <DataTemplate x:Key="templateForTheHeader" DataType="{x:Type vm:TheViewModelType}"> 
     <TextBlock Text="{Binding ThePropertyToDisplayInTheHeader}"/> 
    </DataTemplate> 

</Window.Resources> 

... 

<TabControl ItemsSource="{Binding YourCollection}" 
      ContentTemplate="{StaticResource templateForTheContent}" 
      ItemTemplate="{StaticResource templateForTheHeader}"> 
</TabControl> 
+10

Usted sabe, WPF MVVM + tiene una curva de aprendizaje empinada, pero una vez que el cuelgue de ella las soluciones son realmente muy elegante y limpio. Gracias por su ayuda :) – bluebit

+0

Estoy de acuerdo en que WPF tiene una curva de aprendizaje abrupta, pero no diría eso sobre el patrón MVVM ... en realidad se siente bastante natural cuando comienzas a usarlo :) –

+1

Siempre y cuando las plantillas de datos contienen solo controles de solo lectura, este enfoque funciona. De lo contrario, debe tener cuidado: TabControl recrea la vista cada vez que cambia la página de pestañas, es decir, está perdiendo el estado visual cuando cambia de una pestaña a otra y luego vuelve a cambiar. –

Cuestiones relacionadas