Как я могу получить этот тип макета в Silverlight?
-
29-10-2019 - |
Вопрос
У меня есть список, связанный со списком простых объектов.Как мы знаем, в списке по умолчанию элементы размещены в виде панели стека, поэтому элементы располагаются таким образом
общийОднако у меня есть некоторые условия, с помощью которых я проверяю, должен ли элемент отображаться горизонтально или вертикально, и поэтому элементы могут быть размещены таким образом
Например: -
общийКак это сделать?
(Если вам интересно, зачем мне это вообще может понадобиться, пример сценария - «обновления в стиле facebook», где, если пользователь загружает 3–4 фотографии постоянно, они не всегда появляются в следующей строке, но могутотображаются горизонтально, тогда как если он публикует какое-то событие, оно появляется в следующей строке.)
Заранее спасибо :)
Решение
Суть решения заключается в использовании другого кода ItemsControl
в коде ItemTemplate
.Этот кодовый кодовый код должен иметь горизонтально ориентированный общий кодовый код в качестве своего общего кодового кода.
Вот простой пример.Начнем с очень простых тестовых данных: -
общий Теперь мы хотим отобразить этот список в ListBox, но сохранить все имена с одинаковым первым инициалом в одной строке.Я собираюсь использовать реализацию ListBox
для работы с нужной нам группировкой.Если вы используете MVVM, то вам нужна модель ViewModel.
Результатом этого конвертера является, по сути, генеральный кодовый код, который нам и нужен.Внешний ListBox будет перечислять внешний набор, а внутренний ItemsControl
перечислит внутренний набор строк, который будет набором имен с тем же начальным символом.
Вот xaml: -
общийДругие советы
При использовании MVVM узор Я бы сделал что-то вроде этого:
- Создайте ViewModel для представления, в котором находится ваш список. Эта виртуальная машина содержит коллекцию экземпляров
ListItemViewModel
(см. следующий пункт) - Создайте модель представления с именем ListItemViewModel (дайте ей более подходящее имя в зависимости от вашего домена). Эта модель представления содержит коллекцию экземпляров ItemViewModel (см. Следующий пункт).
- Создайте модель представления с именем ItemViewModel. Каждый из них поддерживает отдельный элемент в списке. Дайте ему более подходящее имя в зависимости от вашего домена.
- Создайте представление, содержащее ваш список. Привяжите свой список к коллекции ListItemViewModels в виртуальной машине. Шаблон элемента для этого списка будет ListItemView (см. Следующий пункт). Шаблон панели элементов будет StackPanel по умолчанию.
- Создайте ListItemView с контекстом данных ListItemViewModel. Это представление состоит из горизонтальной StackPanel элементов ItemView (см. Следующий пункт).
- Создайте ItemView, поддерживаемый ItemViewModel.
Ваше представление будет выглядеть примерно так, каждое с соответствующей моделью представления.
Как я уже сказал выше, вы определенно захотите изменить имя своих моделей представлений / представлений, мои предназначены только для демонстрационных целей :)