Как использовать разные панели в виде сгруппированного списка? - PullRequest
0 голосов
/ 16 января 2019

Мне нужно использовать другую панель для определенного раздела / группы в моем ListView. Как мне это сделать (используя XAML, C # или что-нибудь еще)? Я уже пытался использовать GroupedStyleSelector, но это не сработало (я исследовал это, но оказалось, что он не предназначен для этой цели). Вот мой XAML прямо сейчас:

<ListView ItemsSource="{Binding Source={StaticResource cvs}}">
    <ListView.GroupStyle>
        <GroupStyle HidesIfEmpty="True">
            <GroupStyle.Panel>
                <ItemsPanelTemplate>
                    // I want to change this for a particular group
                    <uwp:SGStaggeredPanel/>
                </ItemsPanelTemplate>
            </GroupStyle.Panel>
        </GroupStyle>
    </ListView.GroupStyle>
</ListView>

Я подумываю о создании подкласса панели, но проблема в том, как мне получить ссылку на текущую группу?

1 Ответ

0 голосов
/ 16 января 2019

https://docs.microsoft.com/en-us/windows/communitytoolkit/extensions/listviewbase

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

Но вы можете легко расширить ListView в шаблонный элемент управления, а затем упростить доступ к Viewmodel, в котором находится ваш Itemsource, и затем вы можете изменить

 private static void ItemTemplateContainerContentChanging(Windows.UI.Xaml.Controls.ListViewBase sender, ContainerContentChangingEventArgs args)

где происходит вся магия.

Обозначение для реализации

Примечание 0:

если вы не знаете mvvm и связывание, забудьте, что вы когда-либо читали это, и изучайте его.

Примечание 1:

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

Примечание 2:

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

Примечание 3:

Чтобы преобразовать это в шаблонный / настраиваемый элемент управления, вам придется в значительной степени создать собственную реализацию ListView, например, MyListview: ListView

Свойства зависимости должны быть преобразованы в обычные, просто введите «propdp» и дважды нажмите «Tab», чтобы открыть шаблон по умолчанию.

Вам все равно придется ссылаться на все различные DataTamplates из XAML, как показано в приведенном ниже демонстрационном приложении.

Примечание 4:

Снимите ослабление, например, код витрины, направление растяжения и полоски зебры не нужны в вашем случае.

https://github.com/windows-toolkit/WindowsCommunityToolkit/blob/master/Microsoft.Toolkit.Uwp.UI/Extensions/ListViewBase/ListViewExtensions.cs

это точное местоположение фрагмента кода, о котором я говорил, чтобы проверить его в действии и поиграть с ним, загрузите «Windows Community Toolkit» из магазина, он находится в разделе «Расширения».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...