我在使用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);
}));
}
任何想法如何解决?
答案 0 :(得分:0)
尝试不在每个页面激活时重新创建集合。
将此集合init放入构造函数
Persons = new BindableCollection<Person>()
并将OnActivate方法更改为
protected override void OnActivate()
{
base.OnActivate();
var res = _service.GetPresons();
Persons.Clear();
Persons.AddRange(res);
}