7

私は WPF で DependencyProperties を使い始めたばかりで、それらを理解しながらいくつかの考えを確認したいと思っていました。

以下が与えられた場合 (そして今のところ命名規則を無視します):

class MyTestClass
{
    public static readonly DependencyProperty dp1 = DependencyProperty.Register("MyProp", typeof(String), typeof(MyTestClass));

    public static readonly DependencyProperty dp2 = DependencyProperty.Register("MyProp2", typeof(String), typeof(MyTestClass), new PropertyMetadata("Hello"));
}

dp2 が TypeInitializationException をスローし、「'MyTestClass' 型は DependencyObject から派生する必要があります」というメッセージが表示されることがわかりましたが、これは予想どおりでしたが、dp1 は問題なく受け入れられました。

これで、DependencyObject ではない型にプロパティ メタデータを登録しようとしているときに dp2 が例外を発生させる理由がわかりました。これは問題ありません。カバーの下を見て、dp1とdp2の両方がたどるコードパスを見ることができるので、コードの観点からdp1が例外を発生させない理由を理解していますが、概念的にはdp1とdp2の両方が同じ例外を発生させると予想していました。

私の質問は、DependencyObject の GetValue/SetValue メソッドなしでどのように使用できるかがわからないため、ownerType が DependencyObject ではない dp1 のような DependencyProperty を作成することにどのような用途があるかです。

4

1 に答える 1

3

編集
最初の Register-Signature の理由は、メソッドDependencyPropertyによって復元できるデフォルト値を持たず、登録されたClear値変更コールバックも持たない a を登録するためです。

デフォルト値がないため、デフォルト値が有効かどうかのチェックは行われず、例外はスローされません。ただし、そのような登録は使用できません。あなたはそれの恩恵を受けず、例外をスローしないという事実は、それが何かに良いという意味ではありません-それは間違っているだけではありません.

于 2011-02-25T09:57:49.230 に答える