Quiero reutilizar mis UserControls en otros UserControls como página o ventana como DataTemplates, en este ejemplo dentro de un ListBox. Todo es MVVM.UserControl como DataTemplate dentro de ListBox
Tengo un UserControl llamado "CardControl" para mostrar un objeto simple "Tarjeta". La tarjeta tiene dos propiedades, "ID" y "CardImage". Los controles DataContext se configuran a través de XAML. Si abro este UserControl en VS o Blend, me muestra la Tarjeta ficticia que he definido en el ViewModel correspondiente.
Ahora tengo otro UserControl llamado "CardSetControl", que debería mostrar una colección de Tarjetas. Entonces ViewModel tiene una propiedad del tipo ObservableCollection <Card> llamada "Cards".
Aquí está el código:
<ListBox x:Name="MyList" ItemsSource="{Binding CardSet.Cards}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<!-- WORKING, but not what i want -->
<TextBlock Text="{Binding ID}" /> // would display ID of Card
<Image Source="{Binding Image}" /> // would display Image of Card
<!-- NOT WORKING, but this is how i want it to work -->
<UserControls:CardControl DataContext="{Binding "Current listbox item as DataContext of CardControl???"}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Después de leer un montón de artículos sobre MVVM y DataContext/Encuadernación yo todavía no consigo que funcione. ¿Cómo se hace todo esto jerárquicamente USerControls/DataContexts de la mejor manera limpia?
Will, mis disculpas básicamente dio exactamente la misma respuesta que usted.Debería actualizar la página antes de responder la próxima vez;) –
De esta forma, un modelo (Tarjeta) pasa como un DataContext al control del usuario. ¿Qué sucede si me gustaría tener ese control de usuario para usar su modelo de vista? ¿Cómo debo pasar este modelo recibido a un modelo de vista y vincular el modelo de vista a la vista del control? –
@OndrejJanacek: UserControls no debe diseñarse para tener sus propios modelos de vista. Deben tener propiedades públicas vinculables en su superficie que los usuarios enlazarán a sus propios modelos de vista. Esta respuesta se configura más para el OP que las mejores prácticas:/ – Will