依赖项属性回调不起作用

时间:2011-07-05 14:38:17

标签: wpf dependency-properties

我有以下代码:

private static readonly DependencyProperty IDProperty = DependencyProperty.Register(
           "ID", typeof(int), typeof(DetailDataControl), new PropertyMetadata(-1, new PropertyChangedCallback(IDChanged)));

    public int ID
    {
        get { return (int)GetValue(IDProperty); }
        set { SetValue(IDProperty, value); }
    }

    private static void IDChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
         // Do something here!  
    }

我可以看到,当我更改ID时,会调用SetValue行(调用IP属性),但它不会调用IDChanged。

为什么?

3 个答案:

答案 0 :(得分:5)

您的代码是正确的,但是在更改之前不会调用PropertyChanged回调。尝试在连续的代码行中将属性更改为两个不同的值,并有一个断点,您可以看到它已被命中。我相信它被设置为-1,因此它没有被调用。

答案 1 :(得分:0)

使DP公共静态只读。在XAML中设置值时,不使用包装器,直接使用DP。所以,它必须是公开的。

但是......显然你是从代码中设置它的?在那种情况下,我不知道出了什么问题......但你可以随时尝试。

答案 2 :(得分:0)

我不知道这是否已经解决,但是如果您在XAML文件中设置使用它的值,则在某些情况下,执行代码默认值将采用先例并且它永远不会触发从最初设置在XAML中。因此删除默认值-1所以

private static readonly DependencyProperty IDProperty = DependencyProperty.Register(
           "ID", typeof(int), typeof(DetailDataControl), new PropertyMetadata(-1, new PropertyChangedCallback(IDChanged)));

变为

private static readonly DependencyProperty IDProperty = DependencyProperty.Register(
       "ID", typeof(int), typeof(DetailDataControl), new PropertyMetadata( new PropertyChangedCallback(IDChanged)));