当只有一个对象在集合中时,LongListSelector不能正确刷新

时间:2014-09-26 07:40:38

标签: c# xaml windows-phone-8 caliburn.micro longlistselector

我在使用caliburn micro和Longlistselector时遇到问题。

我的viewmodel中的BindableCollection在视图中绑定到LLS中的ItemSource。

在OnActivate方法中,我将数据从本地数据库加载到我的BindableCollection以刷新LLS。从我的列表页面,我可以转到另一个页面来编辑列表中的所选项目,保存后我返回到我的列表页面。 然后再次调用OnActivate方法,该方法从本地数据库中获取SomeType的所有对象并分配新的BindableCollection,以便更新LLS。

当本地数据库中有多个元素时,这非常有用。但是当本地数据库中只有一个对象时,LLS在编辑后不会更新,在编辑之前仍然会显示相同的数据。

此外,当我再次编辑此对象以编辑页面时,会显示正确的数据。

以下是我的OnActivate方法

protected override void OnActivate()
    {
        base.OnActivate();

        Task<List<Person>>.Factory.StartNew(() => _service.GetPresons()).ContinueWith(
            x => Execute.BeginOnUIThread(() =>
            {
                this.Persons = new BindableCollection<Person>(x.Result);
            }));
    }

任何想法如何解决?

1 个答案:

答案 0 :(得分:0)

尝试不在每个页面激活时重新创建集合。

将此集合init放入构造函数

Persons = new BindableCollection<Person>()

并将OnActivate方法更改为

protected override void OnActivate()
{
    base.OnActivate();

    var res = _service.GetPresons();
    Persons.Clear();
    Persons.AddRange(res);
}