public async Task<bool> SetEncodingAsync(Encoding encoding)
        {
            // re-interpret existing file with the specified encoding

            if (Path != null)
            {
                if (! await SavePendingChangesAsync())
                    return false;

                var text = await ReadTextAsync(Path, encoding);

                // since we re-interpret the text
                // the document would be "modified" whereas
                // it semantically contains the same text
                // 

                // setting IsEncodingChanging instructs
                // the view to ignore the modifications

                IsEncodingChanging = true;
                SetTextContent(text);
            }

            // store the current encoding for later use

            Encoding = encoding;

            // returns whether using this encoding
            // was successfull.

            return encoding.DecodedSuccessfully();
        }