2014-09-26 3 views
0

У меня проблема с калибром микро и Longlistselector.LongListSelector не обновляется правильно, когда только один объект находится в коллекции

BindableCollection from my viewmodel связывается с ItemSource в LLS в представлении.

В методе 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, которая в некоторых случаях может кэшировать элементы –