C# windows phone 8中未调用DependencyProperty属性

C# windows phone 8中未调用DependencyProperty属性,c#,xaml,data-binding,windows-phone-8,binding,C#,Xaml,Data Binding,Windows Phone 8,Binding,我之前发布了一个基于同一问题的问题,但我认为我应该从更准确的信息开始,因为我认为问题的根源有太多的因素,而这些因素实际上并不相关 我在windows phone应用程序中有一个UserControl,我需要在其中添加一个属性,该属性将绑定到我的ViewModel中声明的属性。根据我在网上读到的内容和我的理解,我需要创建一个dependencProperty,以使其可绑定 public static readonly DependencyProperty SourceFileProperty =

我之前发布了一个基于同一问题的问题,但我认为我应该从更准确的信息开始,因为我认为问题的根源有太多的因素,而这些因素实际上并不相关

我在windows phone应用程序中有一个
UserControl
,我需要在其中添加一个属性,该属性将绑定到我的
ViewModel
中声明的属性。根据我在网上读到的内容和我的理解,我需要创建一个
dependencProperty
,以使其可绑定

public static readonly DependencyProperty SourceFileProperty = DependencyProperty.
Register("SourceFile", typeof(string), typeof(ViewerControl), 
new PropertyMetadata(""));

public string SourceFile
{
    get
    {
         return base.GetValue(SourceFileProperty) as string;
    }
    set
    {
         base.SetValue(SourceFileProperty, value);
    }
}
这是my
ViewModel中的属性:

public string DocumentUri
{
    get { return this._documentUri; }
    set
    {
        if (this._documentUri != value)
        {
            this.SetProperty(ref this._documentUri, value);
        }
    }
}
注意,
SetProperty
采用了
INotifyPropertyChange
,并且我的
ViewModel
已被明确绑定,因为其他属性已被使用并正在正确更新,但这些属性未绑定到我的用户控件

这是我的XAML

<Grid Grid.Row="1">
    <StackPanel Orientation="Vertical">
        <cc:ViewerControl SourceFile="{Binding DocumentUri}" />
    </StackPanel>                        
</Grid>

我在我的
ViewModel
中的
DocumentUri
的getter和setter以及
UserControl
中的
SourceFile
dependencProperty
的定义上都有一个断点

当我运行代码时,会相应地调用
DocumentUri
dependencProperty
的定义也会初始化,但它从不调用我的
UserControl
SourceFile
属性的getter/setter

注意:如果将该属性定义为常规CLR属性,则会出现一个毫无意义的错误:

值不在预期范围内

我需要在更改
DocumentUri
属性时“触发”
SourceFile
属性

我做错了什么或错过了什么

谢谢。

当从XAML获取/设置DP时,不会调用依赖属性getter和setter。那个这就是为什么你不应该在里面放任何代码

从链接:

其XAML处理器的当前WPF实现本质上是 依赖属性感知。WPF XAML处理器使用属性系统 加载二进制XAML和 正在处理作为依赖项属性的属性。这有效地 绕过属性包装。实现自定义依赖项时 属性,则必须说明此行为,并应避免 在属性包装器中放置除 属性系统方法GetValue和SetValue


您可以使用跟踪DP属性更改,只要从XAML或代码更改DP属性,就会调用该属性。

谢谢,这很有效!我正要更新我的帖子,这时我看到你提供了答案!我发现这篇文章为我澄清了这一点。在它工作时,它破坏了我的xaml预览,并显示了以下异常:“对象引用未设置为对象的实例”。我应该为空性处理其他事情吗?不,不应该。尝试重建解决方案。您好,我通过添加以下检查修复了它:if(ViewControl!=null&&e.NewValue!=null){ViewControl.SourceFile=e.NewValue.ToString();}。谢谢。除非你想做动画,否则你不需要依赖属性。