2016-11-15 4 views
2

gibt es viele Schaltflächen im Hauptfenster meiner WPF-App. Die Befehle dieser Schaltflächen sollten die gleiche Implementierung/Funktion haben, aber abhängig davon, welche Schaltfläche gedrückt wurde, ändert sich die Datei/der Pfad, auf den die Funktion zugreift. Wie kann ich erkennen, welche Schaltfläche mit CommandParameter aus ViewModel geklickt wurde? Wie kann ich diesen Parameter in der Methode Dowork verwenden? In diesem Beispiel heißt der CommandParameter von Button1 "button1" und der von Button2 ist "button2".Übergeben Sie einen Befehlsparameter an Backgroundworker in ViewModel WPF

Her ist der Code des Backgroundworker in meinem Viewmodel:

public ViewModel() 
    { 
     ... 

     this.instigateWorkCommand = new DelegateCommand(o => this.worker.RunWorkerAsync(), o => !this.worker.IsBusy); 
     this.worker = new BackgroundWorker(); 
     this.worker.DoWork += this.DoWork; 
     this.worker.ProgressChanged += this.ProgressChanged; 
     this.worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_Completeted); 
     this.worker.WorkerReportsProgress = true; 
    } 

Her ist der Code von DoWork in meinem Viewmodel:

private void DoWork(object sender, DoWorkEventArgs e) 
    { 
     // if (parameter.ToString().contains("button1")... 
     // if (parameter.ToString().contains("button2")... 
    } 
+0

Schauen Sie hier http://StackOverflow.com/Questions/5566323/WPF-how-to-know-the-current-button-pressed-among-multiple-buttons – Ggalla1779

Antwort

0

Ich würde vorschlagen, wenn Sie Run der Arbeiter eine der Tasten, um den Parameter als Objekt zu Ihrer RunWorkerAsync(param) Methode übergeben.

2

Normalerweise verwenden Sie die RunWorkerAsync(object) Methode Parameter zu übergeben, um Ihre DoWork Methode.

this.worker.RunWorkerAsync("button1"); 

Und in der DoWorkEventArgs Eigentum Argument enthält den Wert, den Sie in Methode RunWorkerAsync geben.

private void DoWork(object sender, DoWorkEventArgs e) 
{ 
    if (e.Argument == "button1"){ 

    } 
} 
Verwandte Themen