将命令参数传递给ViewModel WPF中的Backgroundworker

时间:2016-11-15 08:51:29

标签: c# wpf backgroundworker

我的WPF-App主窗口上有很多按钮。这些按钮的命令应该具有相同的实现/功能,但是根据按下的按钮,函数访问的文件/路径会发生变化。如何使用CommandParameter检测从ViewModel中单击了哪个按钮?如何在Dowork方法中使用此参数? 在这个例子中,Button1的CommandParameter称为“button1”,Button2的CommandParameter称为“button2”。

她是我的ViewModel中的Backgroundworker的代码:

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;
    }

她是我的ViewModel中的Dowork代码:

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

2 个答案:

答案 0 :(得分:2)

通常,您使用RunWorkerAsync(object)方法将参数传递给DoWork方法。

this.worker.RunWorkerAsync("button1");

DoWorkEventArgs中,属性Argument包含您传递给方法RunWorkerAsync的值。

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

    }
}

答案 1 :(得分:0)

我建议,当你Run工作人员使用任何按钮时,将参数作为对象传递给RunWorkerAsync(param)方法。