Xamarin form UWP-在列表快速滚动显示数据之前显示黑色单元格

Xamarin form UWP-在列表快速滚动显示数据之前显示黑色单元格,uwp,xamarin.forms,xamarin.uwp,Uwp,Xamarin.forms,Xamarin.uwp,当我快速滚动列表时,在加载数据之前,每个单元格都显示为黑色。如果我缓慢滚动数据,黑色单元格将不会显示。这种行为仅在Xamarin UWP项目中发生。请查找下图以供参考。您的代码没有问题。当您滚动过快时,系统没有时间以滚动时的速度渲染单元格,因此会出现黑色单元格。通过编写自定义ViewCell和使用本机datatemplate修复了此问题。现在快速滚动上没有黑色单元格。我张贴我的答案,以便有人会发现它有用 例如:如果您有要显示的姓名列表,请遵循: 首先添加自定义viewcell,如下所示

当我快速滚动列表时,在加载数据之前,每个单元格都显示为黑色。如果我缓慢滚动数据,黑色单元格将不会显示。这种行为仅在Xamarin UWP项目中发生。请查找下图以供参考。

您的代码没有问题。当您滚动过快时,系统没有时间以滚动时的速度渲染单元格,因此会出现黑色单元格。

通过编写自定义ViewCell和使用本机datatemplate修复了此问题。现在快速滚动上没有黑色单元格。我张贴我的答案,以便有人会发现它有用

例如:如果您有要显示的姓名列表,请遵循:

首先添加自定义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); }
        }

       }
现在在XAML中添加ListView,如下所示:

            <ListView 
            ItemsSource="{Binding Products}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <custom:CustomViewCell  Name="{Binding Name}"/>
                </DataTemplate>
            </ListView.ItemTemplate>
            </ListView>
        <ResourceDictionary>
        <DataTemplate x:Key="CustomTemplate">
            <Grid Padding="10">
                <TextBlock  Foreground="#333333" FontSize="14" VerticalAlignment="Center" Text="{Binding Name"/>
            </Grid>
        </DataTemplate>
        </ResourceDictionary>

现在列表可以完美地工作,没有任何黑单元格渲染问题。

luccas clezar是的,没错。这个问题只发生在UWP。有什么办法可以克服这个问题吗?不幸的是,我不这么认为。我尝试了几种提高性能的方法(例如尝试删除绑定并在PropertyChanged或BindingContextChanged中更改单元格),但没有注意到任何性能提高。Hi通过自定义ViewCell解决了此问题。我已经编写了customrenderer来解决这个问题。现在快速滚动上没有黑色单元格。我已经在下面添加了我的答案。嗨@Renjith,仍然是使用自定义视图单元格在listview中闪烁的黑屏。你能帮我吗?
    public class CustomViewCellRenderer : ViewCellRenderer
    {
    public override Windows.UI.Xaml.DataTemplate GetTemplate(Cell cell)
    {
        return App.Current.Resources["CustomTemplate"] as Windows.UI.Xaml.DataTemplate;
    }
    }