dependency な一日

今日は同じエバンジェリストの川西さんと二人、一日Dependency Property に振り回されていました。ああ、書ける。こうは駄目。この組み合わせはOKとか。カスタムコントロールとか作っていると結構複雑になってきます。

結論としては、Dependency Property は結構簡単だということ。(おいおいw)

結構便利なDependency Property はWPFらしいプログラミングのキーワード。でも実装が面倒。(ってほど面倒ではないですけどね)川西さんはこつこつと書きますが、私はツールで楽して..タイプなので、お気に入りはコードスニペット。

Propdp と打って Tab Tab でぱぱっと Dependency Property です。

public int MyProperty
{
get { return (int)GetValue(MyPropertyProperty); }
set { SetValue(MyPropertyProperty, value); }
}

public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass), new UIPropertyMetadata(0));

が、どうもうまくいかないことが多く困っていたのですが、結局一番陥りやすいのが最後のオプションだったんですね。

new UIPropertyMetadata(0)

この 0 は、この Dependency Property の初期値だったわけで、int 型ならいいわけですが、String や Double のときは “” とか、 0.0 とかにしてやらないといけないんですよね。で、ちゃんとやらないと、コンパイルはうまく行っても実行時に初期化エラーになっちゃうんですよね。これでよく悩んでた。

Dependency Property には、Callback 関数も設定することができますが、この関数のポインタも  UIPropertyMetadata の引数に入れちゃうのは素晴らしいです。ということで Dependency Property のカギはこのUIPropertyMetadata ということで。

Dependency Property は Blend と組み合わせると大変便利で楽しい機能。積極的に使いたいものです。