はじめに
バージョン:3.24064.18 でモダンの入力コントロール(プレビュー)に TriggerOutputプロパティが追加されました。
遅れて反映(Delayed)、即時反映(Keypress)、フォーカスが外れたときに反映(FocusOut)の3段階で設定が可能です。
クラシックのテキスト入力では以前からDelayOutputプロパティとしてオンオフの設定がありました。
最近のアップデートでモダンにも一旦DelayOutputプロパティが追加されていましたが、さらにTriggerOutputプロパティに進化しました!
挙動の違いについてのご紹介と既定値が以前と変更されていたので、その辺も含めてご紹介します。
NOTE2024/7月上旬のバージョン:3.24064.18での確認内容となります。
今後のアップデートで変更がある可能性があります。
TIPS記事では触れていませんが、他にもモダンのボタン同様に境界半径やボーダー、パディングなども追加されてより使い勝手が良くなっております!
挙動の違いサンプル動画
内容については以下に書いてますが、挙動の違いは動画の方が分かりやすいと思ったので動画にしました。
見ていただくと違いが分かりやすいと思います。詳細については以下記事の内容をご参考ください。
TriggerOutputプロパティ
公式のドキュメントは以下となります。
※7/5確認時点では英語版でもまだ以前のバージョンの内容となってます。そのうちに更新されると思います。
Power Apps のテキスト入力モダン コントロール – Power Apps |Microsoft Learn
バージョン:3.24064.18の場合
モダンのテキスト入力コントロールを追加すると以下のようにプロパティ画面にTriggerOutputプロパティが追加されています。既定値はFocusOut(フォーカスが外れたら反映)です。(確認時点では)
数式バーの表示
以前のバージョン
それ以前のバージョン(以下はひとつ前の3.24063.22)の場合
詳細タブの方を開くとDelayOutputプロパティがあります。既定値はFalse(即時反映)です。
使いどころ(ギャラリーのフィルターで使用の場合)
このプロパティの使いどころは、特に多いケースとして、テキスト入力コントロールの入力値をギャラリーなどに表示する際のフィルターに使用している場合かと思います。ほかにも入力値を参照して別の項目に反映させるなどもあるかなと思います。
クラシックの時からDelayOutputプロパティはあったので、こういった場合はTrueとして反映を遅らせるように自分はしていました。(理由は後で記載しています)
ギャラリーのItemsプロパティにデータソースからの取得時にFilterでテキスト入力コントロールの値を使っている例
即時反映の場合(TriggerOutputがKeyPress、またはDelayOutputプロパティがFalse)
この時にKeyPress(またはDelayOutput:False)となっていると、1文字入力の度にフィルター内容が変わるため、その都度データソースへアクセスしに行きます。
この場合はパフォーマンス負荷やAPIコール数が多くなるというデメリットがあります。
コレクション値へのアクセスであればAPIコール数がかさむ事はないですが、無駄なアクセスは出来れば避けたいかと思います。
公式の記事でもDelayOutputの説明には以下の通り記載があります。
DelayOutputをTrue(TriggerOutputの場合はDelayed)の方がパフォーマンス負荷軽減にはよいでしょう。
DelayOutputプロパティの記載抜粋
→ここが最新ではTriggerOutputに変わっているので、そのうちに反映されると思います。
遅れて反映の場合(TriggerOutputがDelayed、またはDelayOutputプロパティがTrue)
上記の通り、ギャラリーに表示するフィルターに使用している場合や他の項目で参照している場合などは無駄なアクセスを低減するためには遅れて反映(Delayed)とした方が良いと思っています。
公式にある通り、0.5秒の遅延で変更された事が反映されます。複数文字を入力途中に1文字ずつアクセスしに行くということが避けれます。
反映自体は若干遅れますが、0.5秒なのでそれほど気にならないと思います。
フォーカスアウトの場合(TriggerOutputがFocusOut)
これは新たに追加された挙動です。クラシックの入力コントロールにはありませんでした。
テキスト入力コントロールからフォーカスが外れたとき(別の場所クリックやタブで他項目へ移動など)に変更したという事が反映されます。
一番無駄なアクセスがない挙動と言えますが、正直ギャラリーのフィルターに使っている場合はちょっと微妙かなと思いました。
他の項目を選択するなどでフォーカスを外さないと反映されないので、「あれっ?効かないじゃん」と思ってしまうかもしれませんし、続けて入力して変更したい場合も一旦フォーカス外さないとダメなので使い勝手としてはイマイチな感触でした。(挙動についてはサンプル動画ご参考ください)
他の項目が参照していてその値によって何らかを表示したり、内容チェックしてNotify出すなどの何らかの処理で、フォーカスが外れた場合にだけ動いてほしいケースがあれば使えるかなと思います。
すでに使用している場合はバージョンにより既定値が異なり挙動が変わるので注意!
すでにモダンの入力コントロールを使用されていて、ギャラリーのフィルター用に使ったりしている場合、バージョン:3.24064.18以降の編集画面で開いた際に、DelayOutput(既定値:False)からTriggerOutput(既定値:FocusOut)に変わっています。
このままの状態で公開したら、即時反映→フォーカスアウトでの反映に挙動が変わってしまいますのでご注意ください。
NOTE※バージョン:3.24064.18の場合は既定値がFocusOutのためです。
将来的には既定値が変わるなどあるかもしれません。
また、普通に追加して使う場合もいままでとは違った挙動(フォーカス外さないと反映されない)となるので、あれ?っとなるかもしれません。その際はこのプロパティをチェックしましょう。
個人的なオススメとしてはギャラリーのフィルターに使う場合は特にDelayedとされるのが良いと思います。
TIPSフィルター用に使用しているがボタンクリックでデータソースへアクセスしてコレクションに入れているケースでは無関係です。直接データソース参照している場合にケアが必要となります。
おわりに
今回はモダンのテキスト入力コントロールにTriggerOutputが追加された件についてご紹介しました。
選択パターンが増えたのでさらに幅が広がったかと思います。が、従来と挙動が異なる点があるのでご注意として記事にしました。
また、今回の記事では触れてませんが、モダンのボタン同様に境界半径やボーダー、パディングなどのプロパティも追加されており、現状はまだプレビューではありますがどんどん使い勝手が良くなっています!
※さらにプロパティ見るとRequiredとValidationStateもある(以前のアップデート予定でValidateやラベル付けれるようになるよとあったのでその辺っぽい)
今後もアップデートされてより良くなりそうですね。GAされるのを心待ちにしましょう!
それでは。
関連記事
モダン関連:
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。
コメント