Wpf load и bind динамически

Я придумал замечательный дизайн экрана в нашем приложении WPF MVVM, и теперь у меня много проблем с его реализацией.

Итак, у меня есть экран, на котором я хочу отобразить большой список строк с привязкой к данным. Данные возвращаются асинхронно. Каждая строка содержит расширитель, поэтому выглядит примерно так

+ expander 1
+ expander 2
+ expander 3
+ expander 4

Работает красиво, загружает новые строки, когда пользователь прокручивает список вниз.

Что касается той части, которую я не могу сделать, когда пользователь разворачивает элемент, я хотел бы динамически загружать данные, которые будут отображаться в развернутом разделе строки.

+ expander 1

    <StackPanel>
        <TextBlock/>
        <TextBlock/>
        <DataGrid/>
    </StackPanel>

+ expander 2
+ expander 3
+ expander 4

Таким образом, расширенные данные должны отображать дополнительный текст и подстроки.

Итак, мысли о триггере для IsExpanded, но не уверены, как запускать и возвращать данные для привязки в элементах управления в теле расширителя.

Любые идеи?

Вы говорите о динамическом или асинхронном?

Sir Rufo 26.10.2018 06:26

Что ж, своего рода и то и другое, вот где я собираюсь развязаться. Корневой уровень является асинхронным, дочерний элемент расширителя должен динамически считываться и заполняться. Хотите сделать это из-за большого количества данных, а дочерний элемент также содержит несколько строк в сетке данных.

Simon Billinghurst 27.10.2018 10:33
0
2
69
1

Ответы 1

Итак, способ сделать это:

  1. Создайте класс, скажем, ExpanderRowModel

  2. Создайте DataTemplate для этого класса, который отображает расширитель, закрытый по умолчанию, со всеми данными внутри, когда вы его открываете, привязанными к соответствующему ExpanderRowModel.

  3. Создайте свойство в ViewModel, которое возвращает коллекцию ExpanderRowModel

  4. Свяжите эту коллекцию в ListView или другом элементе ItemsControl, который вам нравится.

Вот как я бы это сделал, если бы корневой уровень коллекции был асинхронным. Я не знаю, как взять асинхронную коллекцию и заполнить каждый элемент в модели представления. Это возможно?

Simon Billinghurst 27.10.2018 10:35

Какую проблему с моим решением может вызвать асинхронная загрузка? Что вы имеете в виду под «асинхронной коллекцией»?

Eibi 27.10.2018 12:36

Корневой уровень (расширитель) возвращается асинхронно, расширенное содержимое содержит другую сетку данных с несколькими строками. Поэтому я не могу вернуть все данные за один вызов. Я хочу, чтобы расширенный контент загружался по команде.

Simon Billinghurst 29.10.2018 00:23

Другие вопросы по теме