Muszę stylować pierwszy i ostatni element widoku listy inaczej. Aby to osiągnąć, zacząłem pracować nad rozwiązaniem opartym na tej odpowiedzi: Use different template for last item in a WPF itemscontrolOdróżniający się szablon pozycji dla pierwszego i ostatniego elementu w ListView
Zasadniczo mam niestandardowy ItemsTemplateSelector, który decyduje o szablonie do zastosowania na podstawie indeksu pozycji w elementach widoku listy (kod poniżej).
Działa poprawnie, z wyjątkiem sytuacji, gdy lista jest aktualizowana (element jest dodawany lub usuwany), szablony nie są wybierane ponownie (na przykład początkowo wybierany jest obiekt SingleItemTemplate, ponieważ istnieje pojedynczy element. element do listy, szablon pierwszego elementu nie zostanie przełączony na FirstItemTemplate). Jak wymusić wybór szablonu dla wszystkich przedmiotów?
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;
}
}
Zastanawiam się, dlaczego nie porównano za pomocą DataTrigger wiązanie do ItemsCount i Wartość do AlternationCount? Czy to dlatego, że ItemCount nie jest właściwością zależności i spowoduje błąd? Czy jest jakiś inny powód? Ponieważ widzę, że będzie to wartość boolowska porównywalna do porównania i dlaczego potrzebujemy konwertera – CarbineCoder
@ ramb00 Spróbowałem i otrzymałem: "Powiązanie A" nie może być ustawione we właściwości "Wartość" typu "DataTrigger" " . Wygląda na to, że wartość nie jest zależnościąProp. –