Devo modellare in modo diverso il primo e l'ultimo elemento di una visualizzazione elenco. Per raggiungere questo obiettivo, ho iniziato a lavorare su una soluzione basata su tale risposta: Use different template for last item in a WPF itemscontrolModello oggetto distinto per il primo e l'ultimo elemento in un ListView
Fondamentalmente, ho un oggetto ItemsTemplateSelector che decide il modello da applicare in base all'indice dell'oggetto negli elementi della vista elenco (codice di seguito).
Funziona correttamente se non che quando l'elenco viene aggiornato (un elemento viene aggiunto o rimosso), i modelli non vengano nuovamente selezionati (per esempio, inizialmente, il SingleItemTemplate viene scelto perché v'è un singolo elemento. Quando aggiungo un elemento all'elenco, il modello del primo elemento non viene passato a FirstItemTemplate). Come forzare la selezione del modello per tutti gli articoli?
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;
}
}
Mi chiedo il motivo per cui non si è confrontato con DataTrigger di Binding per ItemsCount e Valore su AlternationCount? È perché ItemCount non è una proprietà di dipendenza e genererà un errore? O c'è qualche altra ragione? Perché vedo che sarà un booleano uguale al confronto e perché abbiamo bisogno di un convertitore – CarbineCoder
@ ramb00 Ho dato una prova e ottenuto: "A 'Binding' non può essere impostato sulla proprietà 'Valore' di tipo 'DataTrigger'" . Sembra che Value non sia una dependencyProp. –