WPF binding ProgressBar?

3 Antworten

Hallo :)

Du versucht mit deinem Code den du gezeigt hast, dass du eine ProgessBar an den Value einer ProgessBar bindest.

Was du machen musst, ist einen INT in dein ViewModel zu packen. Mach einfach aus deiner ProBar einen INT und es wird gebunden sein.

Woher ich das weiß:Studium / Ausbildung

Tobby00  16.08.2019, 12:53

kleiner Nachtrag: es ist eher nicht der Fall das gesamte Control zu binden. Denn das ViewModel soll dabei helfen die UI und die Logik von einander abzutrennnen.

1
Tastaturbrix 
Fragesteller
 16.08.2019, 12:55

Das Problem ist wenn ich das mache kann ich im Code nicht mehr die => IsIndeterminate umschalten, also von false auf true.
Was ich machen möchte ist wenn der User auf einem Button Klickt das IsIndeterminate auf true gesetzt wird und nach abschluss wieder auf false.

0
Tobby00  16.08.2019, 12:57
@Tastaturbrix

Gebe deiner ProgessBar im XAML die Eigenschaft x:Name="ProBar" und du kannst das machen. Kein ViewModel für diesen Fall nötig.

0
Tobby00  16.08.2019, 13:03

Achtung, habe nochmal kurz nachgedacht. Natürlich kannst du ein ViewModel verwenden! Solltest du vielleicht sogar. Wie voran gesagt, ist es da um Logik und UI zu trennen! Binde dazu einfach einen BOOL an die ProgessBar Eigenschaft IsIntermediate in deinem XAML. Benennen die Eigenschaft in deinem ViewModel IsItermediateProgessBar. ==> <ProgressBar IsIndeterminate="{Binding IsIntermediateProgessBar}" />

1
Tobby00  16.08.2019, 13:14

Kann es sein das dein "ViewModel" in der Klasse MainWindow.xaml.cs ist? Das ist eigentlich keine gute Idee. Du kannst das ViewModel in eine andere Klasse auslagern. Und über den ==> this.DataContext = myViewModel BINDEST du das ViewModel an deine UI. Am besten in der InitalizeComponent() Methode. So hast du eine klare seperation zwischen deiner Logik (MainWindow.xaml.cs), deinem ViewModel und deiner UI.

1
Tastaturbrix 
Fragesteller
 16.08.2019, 13:28
@Tobby00

Nein, ich habe, wie du geschrieben hast, meine Oberfläche von der Logik getrennt.
Die Ausschnitte hier sind nur ein test beispiel eines größeren Projektes.
Ich habe es so aufgebaut:

Standart MainWindow ist ein verweiß auf ein UserControl, dieses UserControl ist meine MainView, und den DataContext habe ich in deiner beschriebenen Methode gespeichert.

1
Tastaturbrix 
Fragesteller
 16.08.2019, 13:33
@Tobby00

TastCommand = new MyCommand(async () =>

      {

        IsIntermediateProgessBar = true;

        await DoWorkAsync();

        MessageBox.Show("Erfolgreich");

        IsIntermediateProgessBar = false;

      }, () => true);

Wenn ich zbs im konstruktor oder in einer Methode dein beispiel anwende funktioniert es einwandfrei, sobald ich es aber in mein befehl einfüge (was async läuft) funktioniert es nicht mehr.
Ne Idee warum ?

0

Entschuldigung beim letzten bild sollte am Anfang folgendes stehen =>

        ProBar.IsIndeterminate = true;

AFAIK funktionieren Progress-Bars am Besten über Background-Worker. Ansonsten kannst du auch ein Dispatch.Invoke machen, z.B

Dispatcher.Invoke(()=>

{

ProgressBar.Value = 5;

});

Wenn das zu schnell geht kannst du auch im Dispatcher Invoke ein Thread Sleep machen