我的WPF-App主窗口上有很多按钮。这些按钮的命令应该具有相同的实现/功能,但取决于按下了哪个按钮,函数访问的文件/路径会发生变化。如何检测哪个按钮被点击从ViewModel使用CommandParameter?如何在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")...
}
通常你使用RunWorkerAsync(object)方法来传递参数给你的DoWork
方法
this.worker.RunWorkerAsync("button1");
在DoWorkEventArgs
中,属性参数包含传递给RunWorkerAsync方法的值。
private void DoWork(object sender, DoWorkEventArgs e)
{
if (e.Argument == "button1"){
}
}
我建议,当您使用任何按钮Run
工人时,将参数作为对象传递给您的RunWorkerAsync(param)方法。