Я пытаюсь отобразить ряд данных с помощью a DataTemplate
в ItemsControl
, с ItemsPanel
набор как регулярная координатная сетка размера 3 x 3. ItemsSource
из ItemsControl
набор должен связать с a CollectionViewSource
который фильтрует исходный набор на основе критерия поиска. Это все хорошо работает.
Список, с которым я связываю, имеет произвольный размер, но я только хочу, чтобы 9 результатов были отображены, но я не могу ни за что в жизни удаться как к также:
a) ограничьте CollectionViewSource
производить первые 9 объектов
b) ограничьте UniformPanel
только к 3 x 3 и никогда не создавать новые строки
c) ограничьте ItemsControl
только позволить 9 данных обрабатывает по шаблону, чтобы быть созданным сразу.
Я действительно царапаю голову, потому что я уверен, что это - общий сценарий привязки данных, но я ничего не могу найти в сети об этом.
Я могу придумать два решения:
Если вы используете модель представления, поместите в нее логику для создания свойства, которое вы можете привязать, которое всегда имеет только 9 элементов. Убедитесь, что он прошел модульное тестирование, чтобы гарантировать, что в коллекцию никогда не попадет более 9 элементов.
В качестве альтернативы вы можете использовать преобразователь при привязке источника элементов для преобразования полного списка в сокращенный список из первых 9 .
Я собирался сказать то же самое, что и Джеймс Хэй (используйте преобразователь), но я бы также добавил, что вы можете привязать параметр ConverterParameter в XAML, чтобы динамически указывать, сколько элементов возвращается.
Это лишь одна из тех вещей, которые вы не можете делать в XAML (пока).
Вы можете создать «CollectionViewSourceView» (: P), который будет обновляться всякий раз, когда CollectionViewSource будет обновлено, чтобы вывести только первые 9 элементов. Тем не менее, это входит в программный код (или, лучше, в модель просмотра).