2009-07-29 7 views
3

Ich habe eine ListView mit vielen Elementen, die in der Suche geladen werden soll. Und ich möchte dem Benutzer die reichere Benutzeroberfläche bereitstellen, so dass beim Laden, ich einen rotierenden Kreis anzeigen würde (bekannt aus AJAX wartet).WPF Animation laden

Ich weiß, dass ich in Threads oder so etwas gehen muss, aber wie ich noch nie zuvor in WPF getan habe, bin ich mir sicher, dass es etwas besseres als Threads in WPF (oder einem einfachen BackgroundWorker) gibt.

Wie auch immer, der Punkt ist, diese Animation während des Ladens anzuzeigen. Irgendeine Idee? Vielen Dank!

Antwort

2

OK ich jetzt eine funktionierende Lösung haben.

Ich habe eine UserControl, die diese Animation enthält. Es befindet sich irgendwo in meinem XAML-Code wie folgt: <customControls:LoadingAnimation x:Name="LoadingAnimation" />. Diese Steuerung wird, wenn neede geladen durch

Aufruf Jetzt
LoadingAnimation.Show(); 

wenn ich auf einen Knopf klicken Sie auf die zeitraubende Arbeit zu tun, bevor ich BeginInvoke() aufrufen, ich diese Animation laden.

Dann, wenn die harte Arbeit beendet ist, rufe ich LoadingAnimation.Hide(). Sehr einfach! Ich füge Code für die anderen hinzu:

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

Nur neugierig, wie hast du den Cancelling-Teil gelöst? – cwap

+1

Haben Sie einfach einen Status, IsSearching, und verwenden Sie Datentrigger, um das Benutzersteuerelement ein- und auszublenden – TerrorAustralis