こちらの続き。
DependencyPropertyクラスを使って依存関係プロパティを作成する事で、データをバインド出来るプロパティを作成できた。
正確にデータの受け渡しをする為には、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として動作するプロパティを作成する事が出来る。
コメントをお書きください