如何在基础数据更改时刷新Treeview

时间:2018-09-20 09:24:36

标签: visual-studio-code vscode-extensions

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

我希望添加新任务时(通过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);

在getChildren函数的TreeDataProvider实现中,我使用以下命令获取任务:

vscode.tasks.fetchTasks()

然后将每个对象变成一个TreeItem

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

1 个答案:

答案 0 :(得分:3)

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

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

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

  refresh(): void {
    this._onDidChangeTreeData.fire(undefined);
  }

然后将其注册为命令

commands.registerCommand("******.refresh", () =>
          treeDataProvider.refresh()
        );

这样做,您可以使用命令refresh重新加载树形视图 我关注了以下文档-https://code.visualstudio.com/api/extension-guides/tree-view

现在您要做的就是在数据发生更改时触发此命令,可以用不同的方式完成

希望有帮助!编码愉快。