Necesito estilizar los elementos primero y último de una vista de lista de forma diferente. Para lograr eso, comencé a trabajar en una solución basada en esa respuesta: Use different template for last item in a WPF itemscontrolPlantilla de elemento distintivo para el primer y último elemento en un ListView
Básicamente, tengo un ItemsTemplateSelector personalizado que decide sobre la plantilla para aplicar en función del índice del elemento en los elementos de la vista de lista (código a continuación).
Funciona correctamente, excepto que cuando se actualiza la lista (se agrega o elimina un elemento), las plantillas no se seleccionan de nuevo (por ejemplo, inicialmente, se selecciona SingleItemTemplate porque hay un solo elemento. Cuando agrego un elemento a la lista, la plantilla de ese primer elemento no cambia a FirstItemTemplate). ¿Cómo forzar la selección de plantilla para todos los artículos?
public class FirstLastTemplateSelector : DataTemplateSelector
{
public DataTemplate DefaultTemplate { get; set; }
public DataTemplate FirstItemTemplate { get; set; }
public DataTemplate LastItemTemplate { get; set; }
public DataTemplate SingleItemTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
ListView lv = VisualTreeHelperEx.FindParentOfType<ListView>(container);
if (lv != null)
{
if (lv.Items.Count == 1)
{
return SingleItemTemplate;
}
int i = lv.Items.IndexOf(item);
if (i == 0)
{
return FirstItemTemplate;
}
else if (i == lv.Items.Count - 1)
{
return LastItemTemplate;
}
}
return DefaultTemplate;
}
}
Me pregunto por qué no se ha comparado el uso de DataTrigger La unión a ItemsCount y Valor a AlternationCount? ¿Es porque ItemCount no es una propiedad de dependencia y arrojará un error? ¿O hay alguna otra razón? Como veo que va a ser un booleano igual a la comparación y por qué necesitamos un convertidor – CarbineCoder
@ ramb00 Lo intenté y obtuve: "No se puede establecer un 'Enlace' en la propiedad 'Valor' de tipo 'DataTrigger'" . Parece que Value no es una dependenciaProp. –