You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF数据绑定失效问题:RadPdfViewer无法加载PDF文件

问题原因及解决办法

我一眼就发现了问题所在——你在RadPdfViewer的XAML代码里覆盖了它的DataContext,导致绑定找不到PathOfPdf属性!

问题根源

你给RadPdfViewer设置了DataContext="{Binding CommandDescriptors, ElementName=pdfViewer}",这会把该控件的上下文从你的Page2实例切换成它自身的CommandDescriptors对象。而CommandDescriptors里根本没有PathOfPdf这个属性,所以DocumentSource="{Binding Path=PathOfPdf}"自然无法生效。

解决办法

有两种方案可以选择,根据你的实际需求来选:

方案一:移除多余的DataContext设置(推荐)

如果你的场景不需要自定义命令逻辑,完全可以删掉RadPdfViewer上的DataContext属性,让它继承Page2的上下文。修改后的RadPdfViewer代码如下:

<telerik:RadPdfViewer x:Name="pdfViewer" 
                      DocumentSource="{Binding Path=PathOfPdf, Mode=TwoWay}" 
                      telerik:RadPdfViewerAttachedComponents.RegisterSignSignatureDialog="True" 
                      telerik:RadPdfViewerAttachedComponents.RegisterFindDialog="True" 
                      Grid.Row="2" 
                      telerik:RadPdfViewerAttachedComponents.RegisterSignaturePropertiesDialog="True" 
                      telerik:RadPdfViewerAttachedComponents.RegisterContextMenu="True"/>

这样控件就能正确绑定到Page2里的PathOfPdf属性了。

方案二:指定绑定的相对源(如果需要保留CommandDescriptors)

如果你确实需要使用CommandDescriptors作为控件的DataContext,那可以给DocumentSource的绑定指定相对源,让它找到Page2的上下文:

<telerik:RadPdfViewer x:Name="pdfViewer" 
                      DocumentSource="{Binding Path=DataContext.PathOfPdf, RelativeSource={RelativeSource AncestorType=Page}, Mode=TwoWay}" 
                      DataContext="{Binding CommandDescriptors, ElementName=pdfViewer}" 
                      telerik:RadPdfViewerAttachedComponents.RegisterSignSignatureDialog="True" 
                      telerik:RadPdfViewerAttachedComponents.RegisterFindDialog="True" 
                      Grid.Row="2" 
                      telerik:RadPdfViewerAttachedComponents.RegisterSignaturePropertiesDialog="True" 
                      telerik:RadPdfViewerAttachedComponents.RegisterContextMenu="True"/>

这里通过RelativeSource向上查找Page类型的祖先,从而获取到Page2的DataContext,进而找到PathOfPdf属性。

另外,检查了你的后台代码,INotifyPropertyChanged的实现是正确的,属性变更通知没问题,所以只要修正DataContext的问题,绑定就能正常工作啦!

内容的提问来源于stack exchange,提问作者user9821580

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:19:15