如何在基础数据更改时刷新树视图

Dav*_*art 9 visual-studio-code vscode-extensions

我为 Visual Studio Code编写了一个非常简单的TreeView扩展,它显示了 VSCode任务的基本列表并在选择时执行任务。

我希望树视图在添加新任务时自动更新(通过 tasks.json 文件,或从 package.json 文件脚本等自动检测到的任务),但无法弄清楚如何这样做。

在我的 activate 方法中,我注册了 TreeDataProvider 和执行命令:

    vscode.window.registerTreeDataProvider('vscodeTasks', treeProvider);
    let disposable = vscode.commands.registerCommand('task.runTask', task => {
      vscode.tasks.executeTask(task);
    });
    vscode.context.subscriptions.push(disposable);
Run Code Online (Sandbox Code Playgroud)

在我在 getChildren 函数中实现 TreeDataProvider 时,我使用以下方法获取任务:

vscode.tasks.fetchTasks()
Run Code Online (Sandbox Code Playgroud)

并将每个变成一个 TreeItem

任何有关自动刷新的帮助将不胜感激。

小智 8

通过将以下内容添加到实现中,我能够重新加载我的树视图

private _onDidChangeTreeData: EventEmitter<
    myItem | undefined
  > = new EventEmitter<myItem | undefined>();

  readonly onDidChangeTreeData: Event<myItem | undefined> = this
    ._onDidChangeTreeData.event;

  refresh(): void {
    this._onDidChangeTreeData.fire(undefined);
  }
Run Code Online (Sandbox Code Playgroud)

然后将其注册为命令

commands.registerCommand("******.refresh", () =>
          treeDataProvider.refresh()
        );
Run Code Online (Sandbox Code Playgroud)

通过这样做,您可以使用我遵循以下文档的命令刷新重新加载树视图 - https://code.visualstudio.com/api/extension-guides/tree-view

现在您要做的就是在您的数据发生变化时触发此命令,这可以通过不同的方式完成

希望能帮助到你!快乐编码。