Xamarin form-UWP — черная ячейка отображается до того, как данные будут видны при быстрой прокрутке списка

Когда я быстро прокручиваю список, каждая ячейка становится черной до загрузки данных. Если я прокручиваю медленно данные, черные ячейки не появляются. Такое поведение происходит только для проекта Xamarin UWP. Пожалуйста, найдите изображение ниже для справки. .com/X1Fsw.png" alt="введите здесь описание изображения">


person Renjith    schedule 05.06.2017    source источник


Ответы (2)


Устранена проблема путем написания пользовательского ViewCell и использования собственного шаблона данных. Теперь нет черных ячеек при быстрой прокрутке. Я отправляю свой ответ, чтобы кто-то мог найти его полезным.

Например: Если у вас есть список имен для отображения, выполните следующие действия:

Сначала добавьте пользовательскую ячейку просмотра следующим образом

        public class CustomViewCell : ViewCell
       {
        public static readonly BindableProperty NameProperty =
            BindableProperty.Create("Name", typeof(string), typeof(CustomViewCell), "");

        public string Name
        {
            get { return (string)GetValue(NameProperty); }
            set { SetValue(NameProperty, value); }
        }

       }

Теперь добавьте ListView в XAML следующим образом:

            <ListView 
            ItemsSource="{Binding Products}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <custom:CustomViewCell  Name="{Binding Name}"/>
                </DataTemplate>
            </ListView.ItemTemplate>
            </ListView>

Затем вам нужно написать стиль DateTemplate в App.xaml проекта UWP следующим образом:

        <ResourceDictionary>
        <DataTemplate x:Key="CustomTemplate">
            <Grid Padding="10">
                <TextBlock  Foreground="#333333" FontSize="14" VerticalAlignment="Center" Text="{Binding Name"/>
            </Grid>
        </DataTemplate>
        </ResourceDictionary>

Наконец, напишите CustomRenderer, чтобы заменить нативную ячейку просмотра на наш ListView.

    public class CustomViewCellRenderer : ViewCellRenderer
    {
    public override Windows.UI.Xaml.DataTemplate GetTemplate(Cell cell)
    {
        return App.Current.Resources["CustomTemplate"] as Windows.UI.Xaml.DataTemplate;
    }
    }

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

person Renjith    schedule 13.06.2017
comment
Привет @Renjith, все еще этот черный экран мерцает в представлении списка, используя ячейку пользовательского представления. Не могли бы вы мне помочь, пожалуйста? - person Riyas; 07.05.2019

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

person Luccas Clezar    schedule 05.06.2017
comment
luccas-clezar Да, верно. Эта проблема возникает только в UWP. Есть ли способ победить эту проблему. - person Renjith; 06.06.2017
comment
К сожалению, я так не думаю. Я попробовал несколько способов повышения производительности (например, попытался удалить привязки и внести изменения в ячейку в PropertyChanged или BindingContextChanged), но не заметил никакого увеличения производительности. - person Luccas Clezar; 06.06.2017
comment
Привет, исправил проблему, настроив ViewCell. Я написал customrenderer, чтобы решить эту проблему. Теперь нет черных ячеек при быстрой прокрутке. Я добавил свой ответ ниже. - person Renjith; 13.06.2017