首页 > 解决方案 > C#,UWP 应用程序:无法将数据从 API 绑定到列表视图

问题描述

我正在尝试在 UWP 应用程序中显示从 api 到 listview 的数据列表。

请在下面找到我的 XAML 代码:

<ListView Name="course_list_view" Margin="-167,389,167,389" ItemsSource="{Binding .}"
                          ScrollViewer.HorizontalScrollMode="Enabled" 
          ScrollViewer.HorizontalScrollBarVisibility="Auto"
          ScrollViewer.VerticalScrollMode="Disabled"
          ScrollViewer.VerticalScrollBarVisibility="Hidden">
                    <ListView.ItemTemplate>
                        <DataTemplate >
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="47"/>
                                    <ColumnDefinition/>
                                </Grid.ColumnDefinitions>
                                <Image Source="{Binding avatar}" Width="32" Height="32"
                                HorizontalAlignment="Left" VerticalAlignment="Center"/>
                                <TextBlock Text="{Binding subject_name}" Foreground="Teal" FontSize="14" 
                                Grid.Column="1" VerticalAlignment="Center"/>
                            </Grid>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>

请在下面找到我的代码:

private async Task GetAssignCourse()
        {
            string id = localSettings.Values[appconstant.ID].ToString();
            AssignCourseService assignCourseDetail = new AssignCourseService();
            courseList = await assignCourseDetail.getAssignCourse(id);
            //for (int i = 0; i < courseList.Count; i++)
            //{
            //    Assignedcourselist assignedcourselist = courseList[i];


            //}
            course_list_view.ItemsSource = courseList;
            //course_list_view.DisplayMemberPath = "subject_name";

        }

我无法显示从 API 到列表的列表。你能帮助我,让我知道我正在做的错误。我对编码很陌生,所以请帮忙

标签: c#listviewuwp

解决方案


根据您的代码,我认为这可能是绑定源没有及时更新。

首先,请检查以下内容:

  1. 结果 fromassignCourseDetail.getAssignCourse (id);是继承自的类型ICollection(例如Listor ObservableCollection

  2. 数据结构是否courseList包含您在DataTemplate

其次,如果这些都正常的话,可以选择以下两个选项试试:

1.在XAML中绑定数据源

XAML

<ListView Name="course_list_view" Margin="-167,389,167,389" ItemsSource="{Binding courseList}"
          ...
          >
       ...
</ListView>

XAML.cs

var result = await assignCourseDetail.getAssignCourse(id);
courseList.Clear();
foreach(var item in result)
{
    courseList.Add(item);
}

// No need set the ItemsSource
// course_list_view.ItemsSource = courseList;

如果courseListObservableCollection,那么可以使用这种方式。因为ObservableCollection继承了INotifyCollectionChanged接口,所以当集合项发生变化时会通知UI发生变化。


2.修改ItemsSource的值一次

首先移除 XAML 中的绑定值ListView.ItemsSource

其次,修改Code-behind中ItemsSource的值

courseList = await assignCourseDetail.getAssignCourse(id);
course_list_view.ItemsSource = null;
course_list_view.ItemsSource = courseList;

courseList作为数据源,是外部定义的。如果我们想要数据的变化触发 UI 的变化,我们需要改变ListView.ItemsSource一次的值,这样数据的变化就会被通知给 UI。

此致。


推荐阅读