[Xamarin.Forms][コントロール] BindablePropertyのデフォルトBindingModeを確認するには?

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コントロールのBindablePropertyによって異なるBindingModeのデフォルト値

Xamarin.Formsの各種コントロール(LabelEntryなど)はBindableObjectクラスを継承し、データバインディング可能なプロパティ(BindableProperty)としてTextなどのプロパティを定義しています。
BindingModeのデフォルト値はBindablePropertyの定義時に設定されます。

ソースコードを見ましょう

コントロールのドキュメントを確認したのですが、BindingModeのデフォルト値については記載されていないようです。 そうなるとソースコードを見るしかなさそうです。

コントロールのソースコードを検索するには

「xamarin.forms コントロール名 github」でググればソースコードが検索できます。
以下は「xamarin.forms entry github」で検索した結果です。Entryコントロールのソースコードが検索できていることがわかります。

google_search_xamarin_forms_control

上記で検索できたのはmasterブランチのソースコードです。ご自身が現在使っているXamarin.Formsバージョンのソースコードを確認するには [2017/4/5 追記] 現在使っているXamarin.Formsバージョンのソースコードを確認するをご覧ください。

EntryコントロールのBindableProperty定義を見てみる

以下はEntryコントロールのTextPropertyの定義部分です。 BindableProperty.Createメソッドの5番目の引数でBindingMode.TwoWayを設定しています。これがTextプロパティのデフォルトのBindingModeです。

LabelコントロールのBindableProperty定義を見てみる

同様の方法でLabelコントロールのTextPropertyの定義を見てみましょう。

こちらはBindableProperty.CreateでBindingModeを指定していません。 その場合はXamarin.Forms.BindableProperty.Create Methodにある通り、BindingMode.OneWayがデフォルトのBindingModeになります。

[2017/4/5 追記] 現在使っているXamarin.Formsバージョンのソースコードを確認する

まず最初に、ご自身が使っているXamarin.Formsのバージョンを確認します。
以下はXamarin Studio Community バージョン 6.2.1(build 3)での確認手順です。
バージョンはpackages.configを開くか、パッケージを右クリックすることで確認できます。

xamarin_forms_version_001

xamarin_forms_version_002

自分が使っているバージョンが確認できたら、Xamarin.FormsリポジトリのReleasesの中から当該バージョンを検索します。
バージョンが見つかったら、Tagの部分をクリックします。

version_2_3_3_193

すると、対象のブランチに移動するのでこの中のソースコードを確認します。
例えば、Entryクラスを確認するには、Xamarin.Forms.Coreをクリックします。 xamarin_forms_core

最後に、対象の.csファイルをクリックすればソースコードが確認できます。 entry_cs

[2017/4/5 追記] Visual StudioやXamarin StudioのアセンブリブラウザーでもデフォルトのBindingModeを確認できる

コメントにて、Xamarin StudioのアセンブリブラウザーでもデフォルトのBindingModeを確認できると教えていただきました。 Xamarin.Formsは頻繁にアップデートされるため、ご自身が今使っているバージョンの実装を確実に確認できるという意味でアセンブリブラウザーで確認した方が良いかと思います。 また、Creating Mobile Apps with Xamarin.Forms Book Chapter 16 Data bindingの431ページにデフォルトのBindingModeがTwoWayのクラスとプロパティの一覧が載っていますが、これが全てとは書かれていないので実装を見るのが確実かと思います。

以下はXamarin Studio Community バージョン 6.2.1(build 3)のアセンブリブラウザーで確認する手順となります。

  1. 参照 > パッケージから > Xamarin.Forms.Coreをダブルクリックします。 xamarin_forms_core_assembly_browser_001

  2. アセンブリブラウザー タブが開いたら、可視性が「すべてのメンバー」、言語が「C#」になっていることを確認します。コントロール名を入力して検索を行い、対象のコントロールをダブルクリックします。 xamarin_forms_core_assembly_browser_002

  3. C#の実装が表示されるので、デフォルトのBindingModeが確認できます。 xamarin_forms_core_assembly_browser_003

おわりに

コントロールのBindablePropertyによって異なるBindingModeのデフォルト値を確認する方法を記事にしてみました。 BindingModeのデフォルト値を確認したい場合にお役に立てば幸いです!

参考記事