2016-11-15 1 views
2

il y a plusieurs boutons dans la fenêtre principale de mon application WPF. Les commandes de ces boutons doivent avoir la même implémentation/fonction mais selon le bouton pressé, le fichier/chemin sur lequel la fonction accède change. Comment détecter quel bouton a été cliqué à partir de ViewModel en utilisant CommandParameter? Comment puis-je utiliser ce paramètre dans la méthode Dowork? Dans cet exemple, le paramètre CommandParameter de Button1 est appelé "button1" et celui de Button2 est "button2".Passez un paramètre de commande à Backgroundworker dans ViewModel WPF

Son est le code du BackgroundWorker dans mon 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; 
    } 

Son est le code de DoWork dans mon ViewModel:

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

Jetez un coup d'oeil ici http://stackoverflow.com/questions/5566323/wpf-how-to-know-the-current-button-pressed-among-multiple-buttons – Ggalla1779

Répondre

0

Je suggère, lorsque vous Run le travailleur en utilisant l'un des boutons, passez le paramètre comme un objet à votre méthode RunWorkerAsync(param).

2

Normalement, vous utilisez la méthode RunWorkerAsync(object) pour passer des paramètres à votre DoWork méthode.

this.worker.RunWorkerAsync("button1"); 

Et dans le DoWorkEventArgs la propriété Argument contient la valeur que vous avez passé dans la méthode RunWorkerAsync.

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

    } 
}