异步更新列表视图

时间:2013-12-03 06:32:16

标签: c# xaml asynchronous winrt-async

到目前为止,我无法找到任何类似的问题,所以我会在这里问:

我有一个项目源(比如一个10人的列表)绑定到ListView。该列表是异步填充的,比方说,列表项将在一秒钟内添加一个项目(人)。你能教我如何让我的ListView从第一个项目开始显示项目,而不是等待第十个项目,然后一起显示它们吗?

任何工作样本都将受到赞赏。

提前谢谢。

XAML:

    <ListView ItemsSource="{Binding tempData, Mode=TwoWay}" Width="1000" Height="1000">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Width="100" Height="50">
                    <TextBlock Text="{Binding name}"/>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
CS(坦白说我正在使用云服务,所以实际代码基本上就像:

await app.WorkWith().Data<Person>().GetAll().ExecuteAsync();

所以,我认为上面的行意味着:

        private async Task<List<Person>> GenerateItem()
    {
        List<Person> tempData = new List<Person>(); 

        tempData.Add(new Person() { name = "name1"});
        await Task.Delay(1000);
        tempData.Add(new Person() { name = "name1" });
        await Task.Delay(1000);
        tempData.Add(new Person() { name = "name1" });
        await Task.Delay(1000);
        tempData.Add(new Person() { name = "name1" });
        await Task.Delay(1000);
        tempData.Add(new Person() { name = "name1" });
        await Task.Delay(1000);
        tempData.Add(new Person() { name = "name1" });
        await Task.Delay(1000);
        tempData.Add(new Person() { name = "name1" });
        await Task.Delay(1000);
        tempData.Add(new Person() { name = "name1" });
        await Task.Delay(1000);
        tempData.Add(new Person() { name = "name1" });
        await Task.Delay(1000);
        return tempData;
    }

最后:

        private async void Populate()
    {

        List<Person> tempData = await GenerateItem();
        listView1.ItemsSource = tempData;            
    }

1 个答案:

答案 0 :(得分:1)

只需使用ObservableCollection ....当项目被添加到集合时,会引发CollectionChanged并且您的listview / gridview自行更新