R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

WPF の依存プロパティを実装

必要があったので、WPF の

依存プロパティを実装

する方法を調べてみたのでメモ。



通常のプロパティの実装

private bool _Hoge;
public bool Hoge {
  get { return this._Hoge; }
  set { this._Hoge = value; }
}



依存プロパティの実装
public static readonly DependencyProperty HogeProperty =
  DependencyProperty.Register(
    "Hoge", typeof(bool), typeof(HogeClassName), new PropertyMetadata(false));
public bool Hoge {
  get { return this.GetValue(HogeProperty); }
  set { this.SetValue(HogeProperty, value); }
}


要するに、

 ・プロパティの値を格納する変数の宣言部分の代わりに、
  依存関係プロパティの登録を行って識別子を取得

 ・取得した依存関係プロパティの識別子を使って、プロパティ値の取得と設定を
  GetValue, SetValue メソッドの引数として識別子を使用する

 ・GetValue, SetValue メソッドは、Window クラスが継承している DependencyObject
  クラスメンバだから、自身のインスタンスからアクセスできる

ってことみたい。

DependencyProperty.Registerメソッドは、基本的に次のように指定すれば OK。


public static readonly DependencyProperty HogeProperty =
  DependencyProperty.Register(
    "Hoge", // プロパティ名
    typeof(bool), // プロパティの型
    typeof(HogeClassName), // プロパティを登録した先の所有者型
    new PropertyMetadata(false) // メタデータを通じてデフォルト値を設定
  );

 

投稿日時 : 2009年6月17日 13:11

Feedback

# re: WPF の依存プロパティを実装 2009/06/17 13:21 倉田 有大

public static readonly DependencyProperty HogeProperty =
  DependencyProperty.Register(
    "Hoge", typeof(bool), typeof(HogeClassName), new PropertyMetadata(false));
public bool Hoge {
  get { return this.GetValue(HogeProperty); }
  set { this.SetValue(HogeProperty, value); }
}

二回Hogeを登録しないといけないところに、実装の仕方に違和感感じるんですよね。

# re: WPF の依存プロパティを実装 2009/06/17 13:49 R・田中一郎

うーん、僕的には「苦心の末なんだろうなー」と感じましたね^^;

# re: WPF の依存プロパティを実装 2009/06/18 11:17 trapemiya

>二回Hogeを登録しないといけないところに、実装の仕方に違和感感じるんですよね。

しなくても良いけど、あれば便利じゃんっていうだけのことだと思いますよ。単なるラッパーですし。

# re: WPF の依存プロパティを実装 2009/06/18 12:10 R・田中一郎

本質的には違うものの、プロパティという名前になっちゃってて、ちょっと混乱しやすいですよね。

# re: WPF の依存プロパティを実装 2009/06/18 14:01 もり ひろゆき

VSを使っているなら
propdp [TAB] [TAB]
で幸せになれるかもです。

# re: WPF の依存プロパティを実装 2009/06/18 14:04 もり ひろゆき

後、DependencyObjectはWindowクラスではなく、UIElementが継承しているのですね。

それによってWPFの多くのコントロールが依存関係プロパティを利用できるようになっていますよ(^^)

# re: WPF の依存プロパティを実装 2009/06/18 14:25 R・田中一郎

>propdp [TAB] [TAB]

依存プロパティ周りのコードスニペットがデフォで用意されているんですね。
これは便利ですね~

>UIElementが継承しているのですね。

継承が深いので、最初のWindows を継承していることで・・・と言う表現のつもりで、つい省略してしまいました。

実際には、以下のようになっているみたいですね。

Window : ContentControl : Control : FrameworkElement : UIElement: Visual : DependencyObject

タイトル
名前
Url
コメント