ルールや正しい実装について調べないでおもむろにプログラムを書いていないだろうか?
動かないプログラムより動くプログラムのほうがいいに決まっている。
しかし、動くかどうかではなくて正しいかどうかがより重要である。
また、別の使い方をされた場合に動かなくなってしまう可能性もある。
このページを見ていただきたい。
http://msdn.microsoft.com/ja-jp/library/ms557303(VS.85).aspx
WPF の DependencyProperty を初期化するときにこんな風に使う。
public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(
"Minimum", typeof(decimal), typeof(NumericUpDown),
new FrameworkPropertyMetadata(DefaultMinValue,
new PropertyChangedCallback(OnMinimumChanged),
new CoerceValueCallback(CoerceMinimum) ) );
PropertyChangedCallback・CoerceValueCallback に注目していただきたい。
PropertyChangedCallback デリゲート:
依存関係プロパティの有効なプロパティ値が変更されたときに呼び出されるコールバックを表します。
CoerceValueCallback デリゲート:
依存関係プロパティの値が再評価されたり強制が明示的に要求されたりした場合に必ず呼び出されるメソッドのテンプレートを提供します。
つまり「プロパティ値が変更されたとき」、「プロパティの値が再評価されたり強制が明示的に要求された」と機能が分かれているので、
たとえば、Value の値を Minimum と Maxinum の間に強制したい場合は CoerceValueCallback で行うといい。
こういうサンプルもあるのでぜひ参考にしてほしい。
http://msdn.microsoft.com/ja-jp/library/aa972161(VS.80).aspx