protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
        {
            base.OnPropertyChanged(e);

            if (e.Property.Name != nameof(DocumentTitle) ||
                StateFullDocument is null ||
                _documentTitle == DocumentTitle)
            {
                return;
            }

            _documentTitle = DocumentTitle;

            if (DocumentTitle.Contains(Constants.TempFileExtension))
            {
                return;
            }

            CacheChanges();
            DocumentStyles.Update(Document.Styles);
            StateFullDocument.NewDocument(TemporalFilePath);

            var args = new DocumentUpdatedEventArgs(StateFullDocument.State, ViewDocumentTitle);

            DocumentStateChanged?.Invoke(this, args);
        }
        protected virtual void OnDocumentSaved(object sender, DocumentSavedEventArgs e)
        {
            CacheChanges();
            StateFullDocument.UpdateDocument(TemporalFilePath);

            var args = new DocumentUpdatedEventArgs(StateFullDocument.State, ViewDocumentTitle);

            DocumentStateChanged?.Invoke(this, args);
        }
        private void OnLoaded(object sender, RoutedEventArgs e)
        {
            CacheChanges();
            StateFullDocument = new StateFullDocument(TemporalFilePath, this);

            _documentTitle = DocumentTitle;
            DocumentSaved += OnDocumentSaved;

            DocumentStyles.Update(Document.Styles);
        }
        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);

            if (StateFullDocument.State == DocumentState.Unsaved)
            {
                return;
            }

            CacheChanges();
            if (StateFullDocument.HasChanged(TemporalFilePath))
            {
                var args = new DocumentUpdatedEventArgs(StateFullDocument.State, _documentTitle);
                DocumentStateChanged?.Invoke(this, args);
            }
        }