在 Xamarin Forms FlowListView 中加载无限项

Posted

技术标签:

【中文标题】在 Xamarin Forms FlowListView 中加载无限项【英文标题】:Infinite items loading in Xamarin Forms FlowListView 【发布时间】:2021-12-25 16:10:12 【问题描述】:

我正在为具有多列的自定义列表视图实施 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。

截图: Click here to view image

【问题讨论】:

【参考方案1】:

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

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


使用前需要致电FlowListView.Init()

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

public MainPage()

    FlowListView.Init();
    InitializeComponent();

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

App.xaml.cs:

public App()

    ...
    FlowListView.Init();
    ...

    

【讨论】:

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

以上是关于在 Xamarin Forms FlowListView 中加载无限项的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Xamarin.Forms.Maps(无 Xamarin.Forms.GoogleMaps)在地图中应用样式或更改颜色

Xamarin.Forms:Forms.Context 已过时

Xamarin.Forms 和 Xamarin Native 有啥区别? [关闭]

Xamarin.forms(或)xamarin.ios/xamarin.android(或)本机

在 xamarin.forms 中应用动画

Xamarin.Forms 5.0 来了