2011-07-05 79 views
2

我有以下代码:依赖属性回调不工作

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(IPproperty的叫法),但它不叫IDChanged。

为什么?

回答

5

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

+0

位A疑难杂症的,我无法得到它的圆形火第一次,所以我设置的依赖属性默认为非标准的默认值价值迫使它提高回调。 –

0

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

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

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)));