wpf - dos plantillas de elementos para un cuadro de lista
wpf listview grouping (2)
En el ListView en XAML puede declarar un ItemTemplateSelector
. El valor para esto vendrá de un recurso estático o similar.
La implementación de su selector de plantilla debe implementar DataTemplateSelector
y básicamente contendrá la instrucción ''if'' que elija la DataTemplate correcta en función del tipo de elemento vinculado. Es probable que encuentre el DataTemplate de los recursos del contenedor pasado (probablemente usando la función FindResource
).
Edit: Buen enlace tal vez? http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselector Enlace muerto.
Tengo una clase de FruitViewModel
. Describe ViewModels para elementos de ListBox
.
<ListBox ItemsSource="{Binding Fruits}">
Y tengo
class BananaViewModel : FruitViewModel
y
class AppleViewModel : FruitViewModel
Fruits
contiene BananaViewModel
s y AppleViewModel
s que está vinculado a ItemsSource
.
¿Cómo puedo hacer diferentes plantillas para manzanas y plátanos? Deben estar en una lista pero tener diferentes plantillas
Puede definir plantillas de datos que se apliquen a cualquier instancia de un tipo específico especificando el tipo de DataType
sin una x:Key
. Usando este método, no asigna nada a ItemTemplate
: las plantillas se aplican automáticamente.
<ListBox ItemsSource="{Binding Path=MixedList}">
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:BananaViewModel}">
<TextBlock Text="{Binding Name}" Foreground="Yellow"/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:AppleViewModel}">
<TextBlock Text="{Binding Name}" Foreground="Red"/>
</DataTemplate>
</ListBox.Resources>
</ListBox>