2014-09-26 32 views
0

我有一個caliburn micro和Longlistselector的問題。當只有1個對象在收集中時,LongListSelector不能正確刷新

從我的viewmodel BindableCollection綁定到LLS視圖中的ItemSource。

在OnActivate方法中,我將數據從本地數據庫加載到BindableCollection中以刷新LLS。從我的列表頁面,我可以到另一個頁面編輯列表中的選定項目,保存後我將返回到我的列表頁面。 然後再次調用OnActivate方法,該方法從本地數據庫獲取SomeType的所有對象,並分配新的BindableCollection,以更新LLS。

當超過1個元素位於本地數據庫中時,此功能非常有用。但是,當本地數據庫中只有一個對象時,編輯後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

嘗試在每個頁面激活時不重新創建集合。

將這個集合初始化到你的構造

Persons = new BindableCollection<Person>() 

和變化OnActivate方法

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

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

已經測試過,不能正常工作。我認爲這可能是LongListSelector在某些情況下可能緩存項目的問題 – 2014-09-26 20:11:53