public TreeItemViewModel( TextSpan textSpan, SourceText sourceText, DocumentId documentId, string fileName, Glyph glyph, ImmutableArray <ClassifiedSpan> classifiedSpans, ValueTrackingTreeViewModel treeViewModel, IGlyphService glyphService, IThreadingContext threadingContext, Workspace workspace, ImmutableArray <TreeItemViewModel> children = default) : base() { FileName = fileName; TextSpan = textSpan; _sourceText = sourceText; ClassifiedSpans = classifiedSpans; TreeViewModel = treeViewModel; ThreadingContext = threadingContext; _glyph = glyph; _glyphService = glyphService; Workspace = workspace; DocumentId = documentId; if (!children.IsDefaultOrEmpty) { foreach (var child in children) { ChildItems.Add(child); } } sourceText.GetLineAndOffset(textSpan.Start, out var lineStart, out var _); sourceText.GetLineAndOffset(textSpan.End, out var lineEnd, out var _); LineSpan = LineSpan.FromBounds(lineStart, lineEnd); PropertyChanged += (s, e) => { if (e.PropertyName == nameof(IsLoading)) { NotifyPropertyChanged(nameof(ShowGlyph)); } }; TreeViewModel.PropertyChanged += (s, e) => { if (e.PropertyName == nameof(TreeViewModel.HighlightBrush)) { // If the highlight changes we need to recalculate the inlines so the // highlighting is correct NotifyPropertyChanged(nameof(Inlines)); } }; }
private async Task <ValueTrackingToolWindow?> GetOrCreateToolWindowAsync(ITextView textView, CancellationToken cancellationToken) { var roslynPackage = await RoslynPackage.GetOrLoadAsync(_threadingContext, _serviceProvider, cancellationToken).ConfigureAwait(false); if (roslynPackage is null) { return(null); } await _threadingContext.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken); if (ValueTrackingToolWindow.Instance is null) { var factory = roslynPackage.GetAsyncToolWindowFactory(Guids.ValueTrackingToolWindowId); var viewModel = new ValueTrackingTreeViewModel(_classificationFormatMapService.GetClassificationFormatMap(textView), _typeMap, _formatMapService); factory.CreateToolWindow(Guids.ValueTrackingToolWindowId, 0, viewModel); await factory.InitializeToolWindowAsync(Guids.ValueTrackingToolWindowId, 0); // FindWindowPaneAsync creates an instance if it does not exist ValueTrackingToolWindow.Instance = (ValueTrackingToolWindow)await roslynPackage.FindWindowPaneAsync( typeof(ValueTrackingToolWindow), 0, true, roslynPackage.DisposalToken).ConfigureAwait(false); } // This can happen if the tool window was initialized outside of this command handler. The ViewModel // still needs to be initialized but had no necessary context. Provide that context now in the command handler. if (ValueTrackingToolWindow.Instance.ViewModel is null) { ValueTrackingToolWindow.Instance.ViewModel = new ValueTrackingTreeViewModel(_classificationFormatMapService.GetClassificationFormatMap(textView), _typeMap, _formatMapService); } return(ValueTrackingToolWindow.Instance); }
public ValueTrackingTree(ValueTrackingTreeViewModel viewModel) { DataContext = viewModel; InitializeComponent(); }