Même si c’est un superbe outil, le Windows Phone 7 n’est pas un PC. C’est notamment vrai au niveau de son CPU qui n’a pas la puissance de celui de nos PC.
De facto, certaines opérations peuvent être couteuse sur le WP7. Par exemple, le binding initial sur une ListBox n’est pas aussi satisfaisant que sur WPF par exemple.
En effet, lorsque l’on va donner l’ItemsSource d’une ListBox sur WP7, l’utilisateur va ressentir un certain “lag” entre le moment ou les données sont affectées au contrôle et le moment ou le contrôle va les afficher. Ceci s’explique par le fait que ce dernier doit construire chaque item (ou au moins ceux qui seront virtualisés, ce qui donne entre 20 et 30 items).
Pour ne pas avoir ce temps d’attente, il suffit de mettre en place une PumpList. Son rôle est simple : Elle va envoyer les items les uns après les autres et ainsi laisser le contrôle s’afficher tout de suite.
Pour avoir un exemple concret, rendez-vous sur http://bewisephonecontrols.codeplex.com ou vous trouverez la classe suivante:
public class PumpList<T>
{
public event EventHandler OnPumpCompleted;
ObservableCollection<T> items = new ObservableCollection<T>();
readonly DispatcherTimer timer = new DispatcherTimer();
readonly IList<T> source;
readonly int totalPumpItems;
int currentPumpItem;
public ObservableCollection<T> Items
{
get { return items; }
}
public PumpList(IList<T> items)
{
source = items;
totalPumpItems = source.Count;
timer.Tick += timer_Tick;
}
public void StartPump()
{
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
Items.Add(source[currentPumpItem]);
currentPumpItem++;
if (currentPumpItem >= totalPumpItems)
{
timer.Stop();
if (OnPumpCompleted != null)
OnPumpCompleted(this, EventArgs.Empty);
}
}
}
.Net, Windows Phone
Windows Phone 7