有没有更好的方法可以执行此循环操作?

时间:2018-07-19 05:10:12

标签: c# xamarin xamarin.forms xamarin.forms.listview

早上好,我在Xamarin Forms项目中有几张图片,我需要创建一个未定义数量的文本框,这应该像用户打开XML文件一样工作,并且应该反序列化它,创建一个文本框并将其添加到页,如果添加另一个,则为2。.

这里的问题是,当用户收到数百甚至数千个此文本框时,我该怎么办,应用会崩溃?

所以我想问一下是否有更好的方法来改进我的代码,因此应用程序可以正常加载,就像文件浏览器一样,即使有很多元素也不会滞后。

就像处理未定义帖子数的Facebook应用一样。

以下是循环的代码:

foreach (string path in FileList)
{
    Textbox TB = new TextBox();
    //TBProperties
}

1 个答案:

答案 0 :(得分:3)

我刚刚在ScrollView和ListView中尝试了1000个条目,而ListView中包含1000个条目和一个模板(具有单个条目)。 ListView具有更大的响应速度,因为它正在回收视图。

XAML:

<ListView x:Name="lst"                  
        ItemsSource="{Binding Items}"
        CachingStrategy="RecycleElement"
        VerticalOptions="FillAndExpand"
        IsPullToRefreshEnabled="False"
        HasUnevenRows="False">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <Entry Text="{Binding Text}"></Entry>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

C#:

public partial class MainPage : ContentPage
{
    public class Item
    {
        public string Text { get; set; }
    }

    public List<Item> Items { get; set; }

    public MainPage()
    {
        InitializeComponent();  
    }

    private void ContentPage_Appearing(object sender, EventArgs e)
    {
        Items = new List<Item>();
        for (int i = 0; i < 1000; i++)
        {
            Items.Add(new Item()
            {
                Text = Guid.NewGuid().ToString()
            });
        }
        lst.ItemsSource = Items;
    }
}