こちらの続き。
DependencyPropertyクラスを使って依存関係プロパティを作成する事で、データをバインド出来るプロパティを作成できた。
正確にデータの受け渡しをする為には、Binding.Modeプロパティを理解する必要がある。
モードの違いによって以下のようにデータの受け渡し方が異なる。
Binding.Modeプロパティ
Default
TextBoxやCheckBoxなど双方向が必要そうなやつの場合はTwoWay
TextBlockなど読み取りだけで済みそうなやつの場合はOneWay
OneTime
最初の1回だけ値を取得する
OneWay
データが更新されるとコントロールの値が更新される
コントロールが値を変えてもデータは更新されない
OneWayToSource
コントロールが値を更新するとデータが更新される
データを更新してもコントロールは更新されない
TwoWay
データが更新されるとコントロールの値が更新される
コントロールが値を更新するとデータが更新される
※OneWayおよびTwoWayを正しく動作させるにはデータがINotifyPropertyChangedを実装している必要がある
未指定の時の動作を制御
明示的に指定しなければDefaultになるが、自作コントロールであればDefault時の動作を正しく制御しておきたい。
モードのDefaultは依存関係プロパティのPropertyMetadataから設定する事が出来る。
public static readonly DependencyProperty SelectedColorProperty =
DependencyProperty.Register(
"SelectedColor", // プロパティ名を指定
typeof(Color), // プロパティの型を指定
typeof(ColorPicker), // プロパティを所有する型を指定
new FrameworkPropertyMetadata(Colors.White,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
(d, e) => {(d as ColorPicker).OnColorPropertyChanged(e); }));
上記のようにFrameworkPropertyMetadataクラスでメタデータを作成し、
オプションにFrameworkPropertyMetadataOptions.BindsTwoWayByDefaultフラグを立てるとDefaltがTwoWayとして動作するプロパティを作成する事が出来る。

コメント
コメントを投稿