在Xamarin Forms FlowListView中,无限加载项目。

3

我正在实现 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。

截图: 点击此处查看图片

1个回答

0

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

更新Init移动(如下面建议的)并没有解决问题。


在使用之前需要调用 FlowListView.Init()

你可以通过将它放在 MainPage 构造函数的较早位置来达成:

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

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

App.xaml.cs:

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

谢谢,但问题仍然存在。我尝试将它放在InitializeComponent()之前和_App.xaml.cs_中,但这两种方法似乎都不起作用。 - Eddie
好的。这很令人惊讶。在运行时,VS输出窗格中是否有任何错误?我建议在源代码中测试提供的示例-看看它是否有相同的症状。下载repo https://github.com/daniel-luberda/DLToolkit.Forms.Controls,打开tree/master/Samples/DLToolkitControlsSamples/DLToolkitControlsSamples.csproj,构建并运行。如果出现相同的问题,请在该github repo的“issues”页面上发布问题。 - ToolmakerSteve
如果原始示例可以正常工作,那么我们需要找出它与您的代码之间的区别。下一步是重新开始:创建一个新项目,添加最少的代码以显示问题。 - ToolmakerSteve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接