9

依存関係のプロパティを学習しています。私は多くの投稿や本を読みましたが、まだ明確ではありません.

以下に示すプログラムは、私が学習のために書いたものです。その中にいくつかのエラーがあります。解決にご協力ください。質問があります。

  1. カスタム Dependency プロパティ要素の主な用途は、変更の通知ですか?
  2. WPF テキスト ブックでButtonの「IsDefaultProperty」コードを見つけました。' IsDefault ' プロパティが依存関係プロパティであることを意味しますか?
  3. なぜ彼らはそのコードを示したのですか? それは、内部的に、Button クラスで、そのように定義されていることを意味しますか? (彼らは内部コードを示しましたか?)またはカスタムとして定義する方法を示しましたか?

これが私のコードです:

namespace DependencyProperties
{
    public class Contact
    {
        private int id=100;
        private string name="shri";
        public static readonly DependencyProperty IsPresentProperty;

        public int ID
        {
            get { return id; }
        }
        public string NAME
        {
            get { return name; }
        }

        static Contact()
        {
            IsPresentProperty = DependencyProperty.Register("IsPresent", typeof(bool),typeof(Contact),new FrameworkPropertyMetadata(false,new PropertyChangedCallback(OnIsPresentChanged)));
        }

        public bool Present
        {
            get { return (bool)GetValue(Contact.IsPresentProperty); }
            set { SetValue(Contact.IsPresentProperty, value); }
        }

        private static void OnIsPresentChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
        {  

        }
    }
}

そして、私はエラーが表示されます:

> Error: GetValue and SetValue does not exist in the current context
4

2 に答える 2

21

DependencyPropertyインスタンスは のインスタンスで定義する必要がありますDependencyObjectDependencyObjectしたがって、クラスは、またはそのサブクラスの 1 つから派生する必要があります。など、WPF の多くの型はこれから派生しButtonます。

したがって、この場合にコードを機能させるには、次を使用する必要があります。

public class Contact : DependencyObject
{
    // ...

これが、 でエラーが発生する理由です。これらは で定義されていGetValueます。SetValueDependencyObject

于 2012-05-09T08:49:33.063 に答える
18

カスタム Dependency プロパティ要素の主な用途は、変更の通知ですか?

いいえ、それもクラスに実装してもらうことでアレンジできINotifyPropertyChangedます。変更通知を提供する依存関係プロパティですが、実際の根拠は別のものです。依存関係プロパティの理由を参照してください。WPFプロパティシステムはどのように経済的ですか?

WPF テキスト ブックで Button の「IsDefaultProperty」コードを見つけました。「IsDefault」プロパティが依存プロパティであることを意味しますか?

はい。フィールドに「FooBarProperty」という名前を付けるのは、依存関係プロパティを定義するための WPF 規則です。ドキュメントをチェックしてIsDefaultProperty、それが実際に依存関係プロパティであることを確認できます。IsDefaultドキュメントにも「依存関係プロパティ情報」というセクションがあります。

なぜ彼らはそのコードを示したのですか? それは、内部的に、Button クラスで、そのように定義されていることを意味しますか? (彼らは内部コードを示しましたか?)またはカスタムとして定義する方法を示しましたか?

「その」コードが何であるかはわかりませんが、はい、プロパティはほぼ確実にそのように定義されていますButton(「ほぼ」は、あなたが何を参照しているのかわからないためです)。

エラー: GetValue と SetValue が現在のコンテキストに存在しません

から派生していないためですDependencyObject

于 2012-05-09T08:49:19.650 に答える