Я не могу сказать точную проблему или причину, но это потому, что DataTrigger устанавливает шаблон, когда счетчик равен 1 и только 1.
Вы можете сделать 1 из 3 вещей, чтобы решить эту проблему, но я бы порекомендовал только 1.
a) Реализуйте свой собственный DataTrigger, выведя из System.Windows.TriggerBase
b) Используйте реализацию System.Windows.Data.IValueConverter , которая преобразует из ItemsControl.Items.Count в DataTemplate. Получите шаблоны, поместив элемент в область ваших ресурсов как Binding.ConverterParameter, приведя их к FrameWorkElement и вызвав FrameWorkElement.FindResource ().
C) Это моя рекомендация, напишите свой DataTemplateSelector , чтобы выполнить грубую работу. Этот механизм специально нацелен на функциональность, которую вы достигаете. Недавно я написал один, который будет выбирать DataTemplate на основе типа исходного объекта, не требуя DataTemplate без набора x: Key. Используя Свойства в селекторе шаблонов, вы можете передать DataTemplates в DataTemplateSelector с помощью XAML, удалив этот список FindResource «todo».