private void SetupCodeEditor() { // Already created? if (workspace != null) { // Anything changed? if (workspace == Workspace /* && projectId == ProjectId*/) { return; } CleanupCodeEditor(); } // Check we have everything we need if (Workspace == null || codeEditor == null || ProjectId == null) { return; } this.workspace = Workspace; // Start with initial text var textDocument = new TextDocument(Text); sourceTextContainer = new AvalonEditTextContainer(textDocument); sourceTextContainer.TextChanged += SourceTextContainer_TextChanged; var documentId = workspace.AddDocument(ProjectId, $"script-{Guid.NewGuid()}.cs", SourceCodeKind.Script, TextLoader.From(sourceTextContainer, VersionStamp.Create())); DocumentId = documentId; workspace.OpenDocument(sourceTextContainer, documentId, a => Dispatcher.Invoke(() => codeEditor.ProcessDiagnostics(a))); // Bind SourceTextContainer to UI codeEditor.BindSourceTextContainer(workspace, sourceTextContainer, documentId); }