public WpfTextViewHandler(IWpfTextView textView) { _textView = textView; _compilerService = CompilerService.Instance; textView.TextBuffer.Properties.TryGetProperty(typeof(ITextDocument), out _document); if (_document != null) { FilePath = _document.FilePath; var bufferChanged = Observable.FromEventPattern <TextContentChangedEventArgs>(s => _textView.TextBuffer.Changed += s, s => _textView.TextBuffer.Changed -= s); var fileAction = Observable.FromEventPattern <TextDocumentFileActionEventArgs>(s => _document.FileActionOccurred += s, s => _document.FileActionOccurred -= s); bufferChanged.Select(_ => false) .Merge(fileAction.Where(a => a.EventArgs.FileActionType == FileActionTypes.ContentSavedToDisk) .Select(_ => true)) .Subscribe(Recompile) .AddTo(_disposer); _compilerService.Listeners.AddListener(this); _compilerService.DocumentOpened(_document); } else { FilePath = "<unknown>"; } var layer = _textView.GetAdornmentLayer("AdornmentLayer0"); if (layer != null) { _layer0 = new AdornmentLayer0(_textView, layer); } textView.Closed += Closed; }