在ViewModel WPF中传递一个命令参数给后台工作者

本文关键字:命令 一个 参数 工作者 后台 WPF ViewModel | 更新日期: 2023-09-27 18:17:52

我的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")...
    }

在ViewModel WPF中传递一个命令参数给后台工作者

通常你使用RunWorkerAsync(object)方法来传递参数给你的DoWork方法

this.worker.RunWorkerAsync("button1");

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

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

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

相关文章: