首页 > 解决方案 > 在 Xamarin Forms FlowListView 中加载无限项

问题描述

我正在为具有多列的自定义列表视图实现FlowListView NuGet 包。

(NuGet 包链接:https ://www.nuget.org/packages/DLToolkit.Forms.Controls.FlowListView/ )

一切都按原样显示。但是应用程序变得非常缓慢。在 Live Visual Tree 中进一步查看时,我发现 FlowListView 中的列表项正在无限加载。我不知道是什么原因造成的。

谁能告诉我为什么会发生,以及如何阻止它?

XAML:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:flv="clr-namespace:DLToolkit.Forms.Controls;assembly=DLToolkit.Forms.Controls.FlowListView"
             xmlns:vm="clr-namespace:FlowDemo.ViewModels"
             x:Class="FlowDemo.MainPage">

    <ContentPage.BindingContext>
        <vm:MainViewModel />
    </ContentPage.BindingContext>
    
    <StackLayout>
        <flv:FlowListView FlowColumnCount="2"
                          RowHeight="50"
                          SeparatorVisibility="Default"
                          HasUnevenRows="false"
                          FlowItemsSource="{Binding Items}" >

            <flv:FlowListView.FlowColumnTemplate>
                <DataTemplate>
                    <Frame Margin="10" Padding="0" CornerRadius="6" HasShadow="True">

                        <Label Text="{Binding}" HorizontalOptions="Center" VerticalOptions="Center" />

                    </Frame>
                </DataTemplate>
            </flv:FlowListView.FlowColumnTemplate>

        </flv:FlowListView>
    </StackLayout>
</ContentPage>

查看型号:

using System.Collections.ObjectModel;

namespace FlowDemo.ViewModels
{
    public class MainViewModel
    {
        public ObservableCollection<string> Items { get; set; } = new ObservableCollection<string>() { "Item 1", "Item 2", "Item 3", "Item 4", };
    }
}

代码背后:

using DLToolkit.Forms.Controls;
using Xamarin.Forms;

namespace FlowDemo
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
            FlowListView.Init();
        }
    }
}

编辑:我正在使用 Visual Studio 2022 和 .Net Standard 2.0。我还使用 PropertyChanged.Fody 来实现 INotifyPropertyChanged。

截图: 点击这里查看图片

标签: c#xamllistviewxamarin.forms

解决方案


问题可能是因为 MainPage 在 InitializeComponent 期间使用了 FlowListView。

更新移动Init(如下所示)没有修复。


使用前需要打电话FlowListView.Init()

你可以简单地通过在 MainPage 构造函数中移动它来做到这一点:

public MainPage()
{
    FlowListView.Init();
    InitializeComponent();
}

但是,如果您更改为不同的起始页面,您可能会忘记调用它。因此,更好的地方是

应用程序.xaml.cs:

public App()
{
    ...
    FlowListView.Init();
    ...
}
    

推荐阅读