Ячейки ListView не работают должным образом с параметрами кэширования и настройками IsEnabled для элементов внутри ViewCells - PullRequest
0 голосов
/ 16 июня 2019

У меня есть просмотр списка, который отображает некоторую информацию об истории платежей пользователей, и в каждой записи платежа есть различные элементы, которые отображаются или не отображаются в зависимости от объекта PaymentEntry. Переменные в этом объекте заполняются из вызова API, который возвращает Json, а затем десериализует его в список наблюдаемых типа PaymentEntry.

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

Мой метод кэширования - RetainElement из-за переменной природы ячеек.

Теперь проблема в том, что привязка для IsEnabled, похоже, не работает. Все записи включены, независимо от того, является ли bool истинным или ложным.

Другая проблема заключается в том, что стратегия кэширования, по-видимому, нарушает представление списка, она отображает только около 8 записей с видимыми их элементами, тогда все остальные элементы просмотра имеют одинаковый размер и полностью пусты от меток, которые должны быть внутри них, есть ли у них привязка для IsVisible / IsEnabled или нет.

Некоторым дополнительным фоном является то, что некоторые элементы отображаются / скрываются с помощью конвертера на bool, отрицательного преобразователя, который я использую.

        <ListView
            x:Name="MyListView"
            CachingStrategy="RetainElement"
            HasUnevenRows="True"
            ItemsSource="{Binding items}">
                                    <Label
                                        Margin="2.5"
                                        FontAttributes="Bold"
                                        HorizontalOptions="StartAndExpand"
                                        Text="{Binding issuedDate}"
                                        VerticalOptions="FillAndExpand" />
                                    <StackLayout
                                        HorizontalOptions="FillAndExpand"
                                        IsVisible="{Binding isBoolOne, Converter={Helpers1:InverseBoolConverter}}"
                                        Orientation="Horizontal"
                                        VerticalOptions="StartAndExpand">
                                        <StackLayout HorizontalOptions="StartAndExpand" VerticalOptions="FillAndExpand">
                                            <Label
                                                FontSize="Small"
                                                Text="Sample Text"
                                                TextColor="RoyalBlue" />
                                            <Label FontSize="Default" Text="{Binding SampleStringOne}" />
                                        </StackLayout>
                                        <StackLayout HorizontalOptions="EndAndExpand" VerticalOptions="FillAndExpand">
                                            <Label
                                                FontSize="Small"
                                                HorizontalTextAlignment="End"
                                                Text="Sample Date"
                                                TextColor="RoyalBlue" />
                                            <Label
                                                FontSize="Default"
                                                HorizontalTextAlignment="End"
                                                Text="{Binding SampleDate}" />
                                        </StackLayout>
                                    <StackLayout
                                        HorizontalOptions="FillAndExpand"
                                        IsVisible="{Binding isBoolTwo}"
                                        VerticalOptions="StartAndExpand">
                                        <Label
                                            FontSize="Small"
                                            HorizontalTextAlignment="Start"
                                            Text="Sample Number"
                                            TextColor="RoyalBlue" />
                                        <Label
                                            FontSize="Default"
                                            HorizontalTextAlignment="Start"
                                            Text="{Binding SampleStringTwo}" />
                                    </StackLayout>
                                    <StackLayout
                                        HorizontalOptions="FillAndExpand"
                                        IsVisible="{Binding isBoolOne}"
                                        VerticalOptions="StartAndExpand">
                                        <Label
                                            FontSize="Default"
                                            HorizontalTextAlignment="Start"
                                            Text="{Binding SampleStringOne}" />
                                    </StackLayout>

Ожидаемый результат состоит в том, что просмотр списка будет отображать ячейки с изменяющимся размером на основе данных, которые они включили. Так, например, если isBoolOne имеет значение true, первый макет стека будет отключен, а если isBoolTwo имеет значение true, следующий стековый макет должен быть включен, а поскольку isBoolOne имеет значение true, последний стековый макет должен быть включен. Вместо этого все 3 из них отображаются независимо от того, что.

Я попытался выполнить отладку для отображения каждого bool в консоли из источника элементов, и они читаются правильно, без нулей и изменяя значения true / false, как и ожидалось. Все привязки строк отображаются правильно. Все привязки bool кажутся истинными.

Вторая проблема заключается в том, что в стратегии кэширования retainelement видны только первые несколько элементов, остальные - пустые. С элементом recycle все они отображаются, но, как я понимаю, это предотвратит изменение элементов, включенных в каждом.

РЕДАКТИРОВАТЬ: я должен пояснить, что я опустил некоторые из XAML, включая ListView.ItemTemplate, DataTemplate, ViewCell, Frame и AbsoluteLayout, которые охватывают то, что я показал. Я сделал это, чтобы минимизировать показанный код и отображать только проблемные области.

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