2009-07-29 8 views
3

J'ai un ListView avec de nombreux éléments qui doivent être chargés dans la recherche. Et je voudrais fournir à l'utilisateur l'interface utilisateur plus riche de sorte que lors du chargement, je montrerais un cercle tournant (connu de AJAX en attente).WPF Chargement de l'animation

Je me rends compte que je dois aller dans Threads ou quelque chose, mais comme je ne l'ai jamais fait auparavant dans WPF, je suis sûr qu'il y a quelque chose de mieux que Threads dans WPF (ou simpe BackgroundWorker).

De toute façon, le but est d'afficher cette animation pendant le chargement. Une idée? Merci!

Répondre

2

OK J'ai une solution de travail maintenant.

J'ai un UserControl qui contient cette animation. Il est situé quelque part dans mon code XAML comme ceci: <customControls:LoadingAnimation x:Name="LoadingAnimation" />. Ce contrôle est chargé lorsque NEEDE en appelant

LoadingAnimation.Show(); 

Maintenant, lorsque je clique sur un bouton pour faire le travail de temps, avant d'appeler BeginInvoke() Je charger cette animation.

Ensuite, lorsque le travail acharné est terminée, j'appelle LoadingAnimation.Hide(). Très simple! J'ajoute du code pour les autres:

private void SearchClick(object sender, RoutedEventArgs e) 
{ 
    LoadingAnimation.Show(); 

    new StringDelegate(DoSearch).BeginInvoke("TextToSearch", null, null); 
} 

private void DoSearch(string searchText) 
{ 
    object result = /* Do the time consuming work */  

    Dispatcher.BeginInvoke(DispatcherPriority.Normal, 
     new ResultDelagate(UpdateUserInterface), result); 
} 

private void UpdateUserInterface(object result) 
{ 
    LoadingAnimation.Hide();    

    DataContext = result as /* what you want */; 
} 
+0

Juste curieux, comment avez-vous résolu la partie d'annulation? – cwap

+1

Il suffit d'avoir un statut, IsSearching, et d'utiliser les datatriggers pour afficher et masquer le contrôle de l'utilisateur – TerrorAustralis

Questions connexes