Xamarin 表单列表视图项目不显示

Posted

技术标签:

【中文标题】Xamarin 表单列表视图项目不显示【英文标题】:Xamarin Forms Listview Items Not Displaying 【发布时间】:2019-01-10 12:43:21 【问题描述】:

我的 Xamarin Forms 应用程序中有一个列表,我已绑定到数据。这一切正常,我知道我正在获取数据,因为如果我点击屏幕,列表会显示数据,但我认为列表应该显示每个项目,而无需点击屏幕。

这是我的 xaml:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="PDInstall.Views.LayoutsPage"
             Title="Layouts">
    <ContentPage.Content>
        <StackLayout>
            <ListView x:Name="layoutsList" IsPullToRefreshEnabled="True"
                      Refreshing="layoutsList_Refreshing" ItemTapped="layoutsList_ItemTappedAsync">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <TextCell Text="Binding Name" />
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

这是我的代码:

public LayoutsPage (Job job)

    InitializeComponent ();

    _job = job;

    Task.Run(() => GetLayoutsListAsync());


private async Task GetLayoutsListAsync()

    if(CrossConnectivity.Current.IsConnected)
    
        layoutsList.IsRefreshing = true;

        IList<CloudBlockBlob> layouts = await azureFileUpload.ListJobBlobsAsync(_job.JobId);

        IList<CloudEditableBlob> layoutList = new List<CloudEditableBlob>();

        foreach(var item in layouts)
        
            CloudEditableBlob editableBlob = new CloudEditableBlob();

            editableBlob.Name = item.Name.Replace(_job.JobId.ToString() + ": ", "");

            editableBlob.Container = item.Container;

            editableBlob.Parent = item.Parent;

            editableBlob.StorageUri = item.StorageUri;

            editableBlob.Uri = item.Uri;

            layoutList.Add(editableBlob);
        

        layoutsList.IsRefreshing = false;

        await Task.Run(() => layoutsList.ItemsSource = layoutList);

    
    else
    
        await DisplayAlert("No Internet Connection", "Please Reconnect to the Internet and re-open PDInstall", "OK");
    

    layoutsList.EndRefresh();

我从 azure 获取 blob 列表,它们只是我们存储的 PDF。我得到了 blob 列表,然后我必须将其放入自定义类中,这样我就可以更改名称,然后将其放入列表中。这一切正常,直到它尝试显示列表并且我得到一个空白页,直到我点击它然后显示列表的位置。

有谁知道我是否可以通过编程方式进行点击或其他操作来显示该列表?或者可能是另一种无需点击屏幕即可获得数据显示的方式?

提前致谢!

【问题讨论】:

对于初学者,您应该稍微优化一下您的代码。您已经在后台线程上调用了GetLayoutsListAsync,因此在设置ItemsSource 时不需要这样做,并且所有ui 更改都应该在主线程上完成,这可能是设置时它没有显示的原因。 【参考方案1】:

替换

await Task.Run(() => layoutsList.ItemsSource = layoutList);

Device.BeginInvokeOnMainThread(() => layoutsList.ItemsSource = layoutList; );

【讨论】:

太棒了!这工作谢谢你!我不知道 BeginInvokeOnMainThread。

以上是关于Xamarin 表单列表视图项目不显示的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin-如何以编程方式扩展列表视图?

xamarin 表单从按钮单击捕获列表视图

Xamarin 表单 - 侧边菜单左侧栏、片段和列表视图

为啥 xamarin 表单列表视图中的组标题在发布模式下不可见?

Xamarin Forms Switch Toggled 事件未与视图模型绑定

Xamarin 表单 - 列表视图上的多个标题