DependencyProperty 以外に Binding マークアップが書ける?
◆ Binding 型のプロパティなら Binding の設定じゃなくて Binding のインスタンスを代入してるみたい
DependencyProperty でないプロパティに Binding しようとすると
と言われます
Framework にある普段から Binding をよく使う Content とか Background とか ItemsSource などのプロパティも DependencyProperty です
それらのプロパティをもつクラス Label や ItemsControl などは DependencyObject です
なので Binding が使えています
ですが 例外で GridViewColumn の DisplayMemberBinding プロパティや DataTrigger の Binding プロパティなどは DependencyProperty ではありません
これらの特徴は 型が Binding (BindingBase) ということです
自分でこういうクラスを作って
XAML にこう書くと
のように Binding のときはエラーになりません
たぶん Binding 型のときは Binding マークアップ書いても Binding を設定するのじゃなくて プロパティに Binding を代入するという動きになるのだと思います
なぜ気づいたか というと 上で書いたようなプロパティの BindingExpression が欲しかったのですが取得しようとしたら DependencyProperty がないので取れない! と思って気づきました
BindingExpression がとれないと DataTrigger とかで手動で Binding 更新したいときなどどうするんだろう?
型 ○○ の ×× プロパティで 'Binding' を設定することはできません。'Binding' は、DependencyObject の DependencyProperty でのみ設定できます。
と言われます
Framework にある普段から Binding をよく使う Content とか Background とか ItemsSource などのプロパティも DependencyProperty です
それらのプロパティをもつクラス Label や ItemsControl などは DependencyObject です
なので Binding が使えています
ですが 例外で GridViewColumn の DisplayMemberBinding プロパティや DataTrigger の Binding プロパティなどは DependencyProperty ではありません
これらの特徴は 型が Binding (BindingBase) ということです
自分でこういうクラスを作って
public class Class 3
{
public string binding1 { get; set; }
public Binding binding2 { get; set; }
public int binding3 { get; set; }
}
{
public string binding1 { get; set; }
public Binding binding2 { get; set; }
public int binding3 { get; set; }
}
XAML にこう書くと
<local:Class3 x:Key="type-string" binding1="{Binding xxx}"/>
<local:Class3 x:Key="type-binding" binding2="{Binding xxx}"/>
<local:Class3 x:Key="type-int" binding3="{Binding xxx}"/>
<local:Class3 x:Key="type-binding" binding2="{Binding xxx}"/>
<local:Class3 x:Key="type-int" binding3="{Binding xxx}"/>
のように Binding のときはエラーになりません
たぶん Binding 型のときは Binding マークアップ書いても Binding を設定するのじゃなくて プロパティに Binding を代入するという動きになるのだと思います
なぜ気づいたか というと 上で書いたようなプロパティの BindingExpression が欲しかったのですが取得しようとしたら DependencyProperty がないので取れない! と思って気づきました
BindingExpression がとれないと DataTrigger とかで手動で Binding 更新したいときなどどうするんだろう?