C#,UWP应用程序:无法将数据从API绑定到ListView

时间:2019-12-02 16:20:25

标签: c# listview uwp

我正在尝试在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获取的列表。 您能帮我一下,让我知道我在做错什么吗。 我对编码非常陌生,请提供帮助

1 个答案:

答案 0 :(得分:0)

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

首先,请检查以下内容:

  1. assignCourseDetail.getAssignCourse (id);的结果是从ICollection继承的类型(例如ListObservableCollection

  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的绑定值。

第二,在“隐藏代码”中修改ItemsSource的值

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

courseList作为数据源在外部定义。如果我们希望数据更改触发UI更改,则需要一次更改ListView.ItemsSource的值,以便将数据更改通知UI。

最诚挚的问候。