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

コントロールの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のデフォルト値を確認したい場合にお役に立てば幸いです!

参考記事

  • Creating Mobile Apps with Xamarin.Forms Book の Chapter 11 – https://developer.xamarin.com/guides/xamarin-forms/creating-mobile-apps-xamarin-forms/#Chapter_16._Data_Binding の P.431 には、既定値が TwoWay なコントロールの一覧がありますが、これが全てであるとは書かれていませんね。

    また、Visual Studio や Xamarin Studio のアセンブリブラウザで BindableProperty.Create の一文を確認することができます。

    • Jun Kato

      コメントありがとうございます!IDEから離れる必要が無い、バージョン一致が確実という意味でもアセンブリブラウザーで見た方が良さそうですね。アセンブリブラウザーで確認する方法を追記しておきました。

      > Creating Mobile Apps with Xamarin.Forms Book の Chapter 11 – https://developer.xamarin.c… の P.431には、既定値が TwoWay なコントロールの一覧がありますが、これが全てであるとは書かれていませんね。
      こちらですが、Chapter 11ではなく、Chapter 16 Data bindingの章にありました。
      https://xamarin.azureedge.net/developer/xamarin-forms-book/XamarinFormsBook-Ch16-Apr2016.pdf

      • 久米史也

        素の Visual Studioに、アセンブリブラウザありましたっけ?オブジェクトブラウザしかないような…
        Xamarin Studio にはあるのは確認してますが(^^;
        環境
        – Windows 10
        – Visual Studio 2017 Enterprise

  • nuits.jp

    最新のコードの状態と利用者のバイナリの状態が一致しないケースもありますから、利用バージョンのソースの見方も併記された方が良いのではないでしょうか?

    • Jun Kato

      コメントありがとうございます!
      おっしゃる通りです。そういう意味ではアセンブリブラウザーで見た方が確実だと思いますので、その方法を追記させていただきました。

  • caramelopardalis

    Visual Studio 2017 Community だとアセンブリーブラウザーはなさそうです。でも、Extension の ILSpy 入れれば実装見れますね。