【发布时间】:2018-07-04 17:28:42
【问题描述】:
我正在尝试对 pdfviewer 使用 MVVM 绑定,但文档总是显示为空白。我正在查询一个包含 PDF 文件字节的 DB 字段,并试图让它在查看器中显示(我已经确认该文件没有格式错误,如果我将其保存为 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}" />
但是,查看器中没有显示任何内容。我确认我的 VM 已正确连接,因为其他属性显示正常。任何建议将不胜感激。
【问题讨论】:
-
RaiseAndSetIfChanged 是否触发 INotifyPropertyChange?
-
是的,它是来自名为 Reactiveui 的库中的一种方法。