WPF Data-bound-ProgressBar keine Fortschritte zeigen

Ich habe Probleme mit dem erhalten der ProgressBar funktioniert.

XAML:

    <ProgressBar x:Name="ProgressBar" Value="{Binding Progress, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Height="37" Margin="10,35,0,0" VerticalAlignment="Top" Width="590"/>

Code hinter:

    ProgressBar.DataContext = progressModel;

IProgressModel:

public interface IProgressModel
{
    double Minimum { get; set; }
    double Maximum { get; set; }
    double Progress { get; }
}

Umsetzung:

    private void WorkerOnDoWork(object sender, DoWorkEventArgs doWorkEventArgs)
    {
        Minimum = 0;
        Maximum = RenamableFiles.Count;

        var i = 0;
        foreach (var renamableFile in RenamableFiles)
        {
            var oldFilename = ReCreateOldFileName(renamableFile);
            var renameProposalFilename = CreateNewFileName(renamableFile);

            if (oldFilename != null && renameProposalFilename != null && !oldFilename.Equals(renameProposalFilename))
            {
                //File.Move(oldFilename, renameProposalFilename);
                Thread.Sleep(100);
                Progress = i++;
            }
        }
    }

- Und das ziemlich straight-forward PropertyChanged Mechanismus:

    private double _progress;
    public double Progress 
    {
        get { return _progress; }
        set 
        { 
            _progress = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

Die ProgressBar startet "voll" und bleibt so über den gesamten Prozess. Ich habe gelesen, alle zugehörigen threads SO, aber kein Glück.

Was mache ich falsch?

Thx im Voraus.

  • Ich vermute WorkerOnDoWork läuft auf einem anderen thread als dem UI-thread. Wenn das der Fall ist, glaube ich nicht, das ist sehr sicher, da wirst du zwei threads auf ein und dasselbe zugreifen.
InformationsquelleAutor bas | 2013-11-04
Schreibe einen Kommentar