Soy bastante nuevo en WPF y trato de entender la mejor manera de extender el control ListBox
. Como una experiencia de aprendizaje, quería construir un ListBox
cuyo ListBoxItem
s muestra un CheckBox
en lugar de solo texto. Lo conseguí trabajando de manera básica usando el ListBox.ItemTemplate
, estableciendo explícitamente los nombres de las propiedades a las que quería enlazar datos. Un ejemplo vale más que mil palabras, así que ...Cómo hacer un ListBox.ItemTemplate reutilizable/genérico
Tengo un objeto personalizado para el enlace de datos:
public class MyDataItem {
public bool Checked { get; set; }
public string DisplayName { get; set; }
public MyDataItem(bool isChecked, string displayName) {
Checked = isChecked;
DisplayName = displayName;
}
}
(. Construyo una lista de las personas y establecer ListBox.ItemsSource
a esa lista) Y mi XAML se ve así:
<ListBox Name="listBox1">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=Checked}" Content="{Binding Path=DisplayName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Esto funciona. Pero quiero que esta plantilla sea reutilizable, es decir, querré vincularme a otros objetos con propiedades distintas de "Comprobado" y "Nombre de visualización". ¿Cómo puedo modificar mi plantilla de manera que pueda convertirla en un recurso, volver a utilizarla en múltiples instancias ListBox
y, para cada instancia, vincular IsChecked
y Content
a nombres de propiedades arbitrarios?
No creo que esto sea posible. Para que el enlace "Controlado" sea flexible, deberá subclasificar el ListBox y agregar un CheckedMemberPath como DisplayMemberPath. No se puede hacer esto solo con una plantilla. –
Eso es lo que temía. Empecé a buscar en subclases de ListBox, pero seguí leyendo cosas sobre cómo son las plantillas increíbles y cómo se deben evitar las subclases si es posible lograr lo que se desea con una plantilla. Supongo que este puede ser un buen caso para una subclase. ¡Gracias! –