Telerik PdfViewer из MVVM View не отображается из байтового потока - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь использовать привязку MVVM для pdfviewer, но документ всегда оказывается пустым. Я запрашиваю поле БД, которое содержит байты файла PDF, и пытаюсь отобразить его в программе просмотра (я подтвердил, что файл не искажен, и он отображается нормально, если я сохраню его в формате PDF на мой рабочий стол).

Вот мои свойства MVVM:

private RadFixedDocument _currentDocument;
public RadFixedDocument CurrentDocument
{
    get => _currentDocument; set => this.RaiseAndSetIfChanged(ref _currentDocument, value);
}

Вот метод, который я использую для заполнения свойства CurrentDocument:

var sqlStr = @"select top 1 * from FileManager order by ID desc;";
var file = await con.QuerySingleAsync<FMFile>(sqlStr);
var fileBytes = file.FileContent.ToArray();  // this is type byte[] - I confirmed that it has the correct contents
var ms = new MemoryStream(fileBytes); // ms gets filled properly
FormatProviderSettings settings = new FormatProviderSettings(ReadingMode.AllAtOnce);
PdfFormatProvider provider = new PdfFormatProvider(ms, settings);
CurrentDocument = provider.Import();

А вот как выглядит мой XAML:

<telerik:RadPdfViewerToolBar RadPdfViewer="{Binding ElementName=pdfViewer, Mode=OneTime}" />
<telerik:RadPdfViewer x:Name="pdfViewer"
                              Grid.Row="1"
                              DocumentSource="{Binding CurrentDocument, Mode=TwoWay}" />

Однако в программе просмотра ничего не отображается. Я подтвердил, что моя виртуальная машина подключена правильно, так как другие свойства отображаются нормально. Любой совет будет оценен.

1 Ответ

0 голосов
/ 04 июля 2018

Похоже, вы привязываетесь к неправильному типу объекта.

Вместо RadFixedDocument, Bind для типа PdfDocumentSource.

private PdfDocumentSource _PDFDocument;
public PdfDocumentSource PDFDocument
    {
        get { return _PDFDocument; }
        set
        {
            _PDFDocument = value;
            OnPropertyChanged("PDFDocument");
        }
    }

private void LoadPDFDocument(string pdfFilePath)
{
    MemoryStream stream = new MemoryStream();

    using (Stream input = File.OpenRead(pdfFilePath))
    {
        input.CopyTo(stream);
    }

    FormatProviderSettings settings = new FormatProviderSettings(ReadingMode.OnDemand);
    PDFDocument = new PdfDocumentSource(stream, settings);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...