WPF ProgressBar avec la Valeur de la liaison de données
Je suis en train de databind la valeur de la propriété d'une ProgressBar dans WPF. J'ai un bouton set jusqu'à incrémenter le databound int propriété de la Valeur de la ProgressBar. Lorsque j'appuie sur le bouton, il devrait faire de la Barre de progression de la Valeur de comptage de 1 à 100. Cependant... il ne semble pas fonctionner et je ne suis pas sûr de ce que je fais de mal. Voici mon code XAML...
<Window x:Class="ProgressBarExample2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="250" Width="400" Background="WhiteSmoke">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
<Button Name="goButton" Height="30" Width="50" Margin="0,10,0,50" Click="goButton_Click">GO!</Button>
<ProgressBar Name="progressBar" Width="300" Height="30" Value="{Binding Percent, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
et voici mon code derrière...
public partial class MainWindow : Window, INotifyPropertyChanged
{
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChange(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
private int percent = 0;
public int Percent
{
get { return this.percent; }
set
{
this.percent = value;
NotifyPropertyChange("Percent");
}
}
public MainWindow()
{
InitializeComponent();
}
private void goButton_Click(object sender, RoutedEventArgs e)
{
for (Percent = 0; Percent <= 100; Percent++)
{
Thread.Sleep(50);
}
}
}
vous pouvez peut-être essayer d'ajouter un timer sur le bouton cliquez sur démarrer la minuterie. Minuterie de rappel incrément de l' % - avec une bonne liaison de données cela devrait fonctionner. Rappels de la minuterie sont dans le thread d'arrière-plan de sorte que votre thread principal est libre de mettre à jour la barre de progression
OriginalL'auteur user1451495 | 2013-01-10
Vous devez vous connecter pour publier un commentaire.
Le Fil.Le sommeil est le blocage du thread de l'INTERFACE utilisateur et l'arrêt de l'animation de la barre de progression.
Vous pouvez utiliser les méthodes suivantes pour suspendre l'exécution, sans bloquer le thread d'INTERFACE utilisateur. Remplacer votre
Thread.Sleep(50)
appel avecWait(50)
EDIT: délégué Supprimé
OriginalL'auteur bic
Il n'y a pas de code (posté) qui définit le DataContext de la Fenêtre (ou StackPanel).
Pour être sûr de la cause, de regarder la fenêtre de Sortie pour la Liaison des erreurs.
Et en plus,
Ce blocs de traitement d'un message de sorte que votre application sera 'ne répond pas' pendant 5 secondes. Pas de traitement d'entrée et pas d'écran mises à jour auront lieu. Une longue boucle n'est tout simplement pas bon dans un événement piloté par l'interface graphique.
Déplacer ce code à un Backgroundworker ou l'utilisation d'une Minuterie.
Ajout d'une réponse pour cela aussi.
OriginalL'auteur Henk Holterman
Il y a d'autres solutions, sans le databinding.
Vous pouvez déclarer un délégué
private delegate void UpdateProgressBarDelegate(System.Windows.DependencyProperty dp, Object value);
et de l'utiliser dans l'événement click du bouton
OriginalL'auteur Santux