個人的にはタイトルは煽りでもなんでもなく、本気のつもりです。
例えば、PageのAppearingイベント発生時にCommandを実行したい場合、次のように記述すればOKです。
<ContentPage ... bp:Pages.Appearing="{Binding AppearingCommand}"
Xamarin.Formsのすべての要素の、すべてのイベントに対応しています。
これまでであれば、EventToCommandBehaviorを利用して以下のように記述する必要がありました。
<ContentPage ...> <ContentPage.Behaviors> <bp:EventToCommandBehavior EventName="Appearing" Command="{Binding AppearingCommand}"/> </ContentPage.Behaviors>
コンパクトに記述できるようになったかと思います。
詳細は以下に記述します。
前提条件
- Xamarin.Forms 3.0.0.482510 以降
使い方
基本的な使い方は大きく三つのパターンがあります。
- イベントに応じてパラメーター無しでコマンドを実行する
- イベントの特定のプロパティをパラメーターにコマンドを実行する
- ListViewのSelectedItem専用の実行方法
イベントに応じてパラメーター無しでコマンドを実行する
コマンドはXamarin.Forms.BehaviorsPackで提供する添付プロパティを利用してバインドします。
添付プロパティは、次の命名規則に則って定義されていますので、任意のイベントに対応するプロパティを利用してください。
[要素名]s.[イベント名]
例えば、ListViewのItemSelectedイベントであれば、次のように記述します。
<ListView ... bp:ListViews.ItemSelected="{Binding SelectedFruitCommand}">
イベントの特定のプロパティをパラメーターにコマンドを実行する
発生したイベントの任意のプロパティを一つ指定して、コマンドを実行する事が可能です。ただしプロパティの型がUI要素(例えばPage)の場合は非対応です。これはView要素へViewModelから依存が発生するのは好ましくないと考えているためです。
添付プロパティは、次の命名規則に則って定義されていますので、任意のイベントに対応するプロパティを利用してください。
[要素名]s.[イベント名]Notify[プロパティ名]
例えば、ListViewのSelectedItemイベントでSelectedItemプロパティを渡したいのであれば、次のように記述します。
<ListView ... bp:ListViews.ItemSelectedNotifySelectedItem="{Binding SelectedFruitCommand}">
ListViewのSelectedItem専用の実行方法
ListViewでItemが選択された場合、イベント実行後に選択状態を開放したいという事が、ままあります。
その為、専用の添付プロパティを用意しています。
<ListView ... bp:ListViews.ItemSelectedClearSelectedItem="{Binding SelectedFruitCommand}">
他にも特殊用途の添付プロパティが欲しい場合は、こちらのIssueに登録してください。可能であれば対応いたします。
以上です。