2011-07-05 15 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コールバックは変更されるまで呼び出されません。コードの連続した行で2つの異なる値にプロパティを変更して、ヒットしたことが分かるブレークポイントを持つようにしてください。私はそれが-1に設定されていると信じているので、呼び出されません。

+0

ビットになり、私はので、私は非標準への依存関係プロパティのデフォルト値を設定し、それがラウンド最初の時間を発射することができませんでしたコールバックを上げるために値を強制します。 –

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))); 
関連する問題