如何刷新vscode.treedataprovider的树视图?
TreeView最初是填充的,并且TreeView实例化。 “刷新”按钮调用自定义刷新功能以收集更新的数据。此新信息存储在context.globalstate()
ctminfrastructureprovider.refresh();
不更新TreeView。我也添加了活动听众。
export class CtmInfrastructureProvider implements vscode.TreeDataProvider<number> {
private _onDidChangeTreeData: vscode.EventEmitter<number | null> = new vscode.EventEmitter<number | null>();
readonly onDidChangeTreeData: vscode.Event<number | null> = this._onDidChangeTreeData.event;
.
.
.
constructor(private context: vscode.ExtensionContext) {
let ctmInfrastructureCacheTmp: any = context.globalState.get('ctmInfrastructureCache');
this.refresh();
}
.
.
.
}
这是我的刷新功能:
let ctmInfrastructureRefreshEntry = vscode.commands.registerCommand(
'ctm.infrastructure.refreshEntry',
async () => {
ctmInfrastructureDicsovery = discoverCtmInfrastructure(); context.globalState.update('ctmInfrastructureCache',JSON.parse(ctmInfrastructureDicsovery));
ctmInfrastructureProvider.refresh();
}
);
context.subscriptions.push(ctmInfrastructureRefreshEntry);
Treedataprovider Refresh()
refresh(offset?: number): void {
this.parseTree();
}
private parseTree(): void {
this.text = this.ctmInfrastructureCache;
this.tree = json.parseTree(this.ctmInfrastructureCache);
}
我缺少什么?
the TreeView is initially populated and the TreeView instantiated. the 'refresh' button invokes the custom refresh function to gather updated data. This new information is stored in context.globalState()
The ctmInfrastructureProvider.refresh();
does not update the TreeView. I've added the event listener as well.
export class CtmInfrastructureProvider implements vscode.TreeDataProvider<number> {
private _onDidChangeTreeData: vscode.EventEmitter<number | null> = new vscode.EventEmitter<number | null>();
readonly onDidChangeTreeData: vscode.Event<number | null> = this._onDidChangeTreeData.event;
.
.
.
constructor(private context: vscode.ExtensionContext) {
let ctmInfrastructureCacheTmp: any = context.globalState.get('ctmInfrastructureCache');
this.refresh();
}
.
.
.
}
Here are my refresh functions:
let ctmInfrastructureRefreshEntry = vscode.commands.registerCommand(
'ctm.infrastructure.refreshEntry',
async () => {
ctmInfrastructureDicsovery = discoverCtmInfrastructure(); context.globalState.update('ctmInfrastructureCache',JSON.parse(ctmInfrastructureDicsovery));
ctmInfrastructureProvider.refresh();
}
);
context.subscriptions.push(ctmInfrastructureRefreshEntry);
The TreeDataProvider refresh()
refresh(offset?: number): void {
this.parseTree();
}
private parseTree(): void {
this.text = this.ctmInfrastructureCache;
this.tree = json.parseTree(this.ctmInfrastructureCache);
}
What am I missing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您必须触发更改事件:
更新
实际上,我使用的方法与Tree Demo略有不同的方法:
从我的VS代码扩展名中获取: https://github.com/mike.com/mike-lischke/mike-lischke/mike-lischke/mike-lischke/mike-liscode-antlr4/blob/blob/blob/blob/master/src/src/frontend/antlreed/antlreedatapreedataprovider.tssss < /a>。如您所见,我改用
EventEmitter
,这不需要fire()
事件的参数。You have to trigger the change event yet:
Update
Actually, I use a slightly different approach than that from the tree demo:
Taken from my VS Code extension: https://github.com/mike-lischke/vscode-antlr4/blob/master/src/frontend/AntlrTreeDataProvider.ts. As you can see I use
EventEmitter
instead, which does not require a parameter for thefire()
event.如果功能提供了新数据,则刷新正在工作。
例子:
The refresh is working if the new data is being provided by the function.
Example: