2016-11-15 2 views
2

В главном окне моего WPF-приложения есть много кнопок. Команды этих кнопок должны иметь одну и ту же реализацию/функцию, но в зависимости от того, какая кнопка была нажата, файл/путь, по которому функция обращается к изменениям. Как определить, какая кнопка была нажата из ViewModel с помощью CommandParameter? Как я могу использовать этот параметр в методе Dowork? В этом примере CommandParameter Button1 называется «button1», а Button2 - «button2».Передайте командный параметр в Backgroundworker в ViewModel WPF

Ее это код BackgroundWorker в моей 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; 
    } 

Ее это код DoWork в моем ViewModel:

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

Посмотрите здесь http://stackoverflow.com/questions/5566323/wpf-how-to-know-the-current-button-pressed-among-multiple-buttons – Ggalla1779

ответ

0

Я хотел бы предложить, когда вы Run работник, используя любой из кнопок, передать параметр в качестве объекта для вашего метода RunWorkerAsync(param).

2

Обычно используется метод RunWorkerAsync(object) передать параметры Вашего DoWork способ.

this.worker.RunWorkerAsync("button1"); 

И в DoWorkEventArgs свойство Argument содержит значение, которое передается в метод RunWorkerAsync.

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

    } 
} 
Смежные вопросы