У меня есть элемент управления Panorama с 8 PanoramaItems, каждый из которых содержит LongListSelector. При использовании MVVM список связывается со свойством ObservableCollection.
Мне нужно заполнить каждый список данными (много фото, текст ...) с веб-сервера.
Как мне сделать это наилучшим образом, не блокируя поток пользовательского интерфейса?
Я пробовал что-то вроде этого
System.Threading.ThreadPool.QueueUserWorkItem(x => LoadList1());
System.Threading.ThreadPool.QueueUserWorkItem(x => LoadList2());
...
Где функция загрузки выглядит так:
[EDIT] using Rx
private IDisposable _disp;
private void LoadList1()
{
_disp = Observable.FromEvent<PhotoEventArgs>(_webServer, "GetPhotosCompleted")
.Select(a => from l in a.EventArgs.Result
where l.Name.Length > 1
group l by l.Name.ToLower()[0] into c
orderby c.Key
select new Group<Photo>(c.Key, c))
.ObserveOnDispatcher()
.Subscribe(a =>
{
List1Items = new ObservableCollection<Group<Photo>>(a);
_disp.Dispose();
});
_webServer.GetPhotosAsync();
}
Это работает, но интерфейс все еще заморожен.
Как я могу сделать это лучше?
Полагаю, проблема в том, что я использую LongListSelector, поэтому мне нужно сразу добавить все данные в List1Items для LongListSelector для правильной группировки.
РЕДАКТИРОВАТЬ: в Windows Phone Toolkit есть ошибка - ноябрь 2011 г. (7.1 SDK)
пробуждение LongListSelector к группировке неправильно!