在wpf中绑定不起作用,不明白为什么

时间:2018-05-21 06:54:15

标签: c# wpf xaml data-binding

我有一个wpf应用程序我使用了一些xaml代码,可以让我查看pdf文件,我刚刚开始使用数据绑定,并且不知道这对我不起作用。

这里是XAML:

<Grid>
<telerik:RadPdfViewerToolBar RadPdfViewer="{Binding ElementName=pdfViewer, Mode=OneTime}" SignaturePanel="{Binding ElementName=signaturePanel, Mode=OneTime}"/>
<telerik:SignaturePanel x:Name="signaturePanel" PdfViewer="{Binding ElementName=pdfViewer, Mode=OneWay}" Grid.Row="1"/>
<telerik:RadPdfViewer x:Name="pdfViewer" DocumentSource="{Binding Path=PathOfPdf, 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"/>
<Grid>

这里有代码:

public partial class Page2 : Page, INotifyPropertyChanged
{
public Page2()
    {
        InitializeComponent();
        DataContext = this;
     }  

private string _pathOfPdf= @"D:\MyFile.pdf";

    public string PathOfPdf
    {
        get{ return _pathOfPdf; }
        set{
            if (_pathOfPdf != value)
            {
                _pathOfPdf = value;
                OnPropertyChanged();
            }
        }

    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }   
}

如果我没有使用Biding,它可以正常工作。如果我这样做(在XAML上):

DataContext="D:\MyFile.pdf"显示pdf

1 个答案:

答案 0 :(得分:0)

您需要将控件的DataContext或绑定源设置为定义source属性的Page

<telerik:RadPdfViewer x:Name="pdfViewer"
                      DocumentSource="{Binding Path=PathOfPdf, RelativeSource={RelativeSource AncestorType=Page}}" />