Piszę aplikację na panoramie. W jednej z jej itemów pobieram feedy RSS i potem binduje je pod listboxa.
Problem polega na tym, że dopóki wszystko mi się nie ściągnie, to aplikacja wydaje się nie reagować na użytkownika. Tzn, widzę kropeczki ładowania, przesuwam palcem po ekranie kilka razy i w momencie gdy skończy się całe ściąganie itp, przeskakuje tam gdzie być powinienem
Co ciekawe, wystarczy z tego wszystkiego usunąć tylko ustawianie ItemSource - i śmiga jak rakieta:
namespace SmartStart
{
public partial class NewsRSS
{
MainPage mainPageRef;
IEnumerable<SyndicationItem> feedSource;
public NewsRSS(MainPage refDoMainPage)
{
this.mainPageRef = refDoMainPage;
feedLoader();
}
public void feedLoader()
{
WebClient webClient = new WebClient();
webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
webClient.DownloadStringAsync(new System.Uri("http://rss.cnn.com/rss/edition_world.rss"));
}
// Co robimy jak już w końcu się ściągnie?
private void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error != null)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
MessageBox.Show("RSS News feed:\n" + e.Error.Message);
});
}
else
{
UpdateFeedList(e.Result);
}
}
private void UpdateFeedList(string feedXML)
{
StringReader stringReader = new StringReader(feedXML);
XmlReader xmlReader = XmlReader.Create(stringReader);
SyndicationFeed feed = SyndicationFeed.Load(xmlReader);
feedSource = feed.Items;
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
mainPageRef.bindNewsListBox(feedSource);
});
}
}
}
Dla formalności, metoda w MainPage
public void bindNewsListBox(IEnumerable<SyndicationItem> feedSource)
{
feedListBox.ItemsSource = feedSource;
}
Wierzę, że coś pokopałem z wątkami... z tą różnicą, że nie wiem do końca jak to naprawić.
Aczkolwiek, może to zupełnie co innego.