
ギャラリーを使っていると必ず出てくるキーワード。
それがThisItemです。
このThisItemはなんかわかったようでわからない、でも何となく使える不思議な感じがする演算子ですが、今回はこのThisItemについて見ていきます。
PowerAppsに必須の知識PowerFX対応の学習本はこちら
PowerApps学習の本命・実際のアプリももらえる学習本
PowerApps学習方法一覧

Thisitemとは
Thisitemについて公式サイトを見てみると、
Gallery または Form コントロールの現在のレコードのデフォルト名。
公式サイト
となっています。
わかったようなわからないような感じがしますね。
ThisItemを翻訳すると「このアイテム」となります。しかしながら「アイテム」が一体何を指すのかよくわからないので、こういう時はとりあえず変数に格納してみてデータを探ってみましょう。
まずはボタンを配置し以下のコレクションを作成します。
ClearCollect(テスト,{Title:"Title1",Name:"name1",Age:10},{Title:"Title2",Name:"name2",Age:20},{Title:"Title3",Name:"name3",Age:30})
次にギャラリーでこのテストを表示させ、表示を整えると次の状態にします。

この状態でギャラリーのOnselect属性に
UpdateContext({thisitem:ThisItem})
を入力し、ギャラリー内の>を押すと変数「thisitem」にThisitemの情報が格納されます。
とりあえずは一番上にあり>のマークを押してみましょう。その結果が下の状態になります。

どうやら一番上のレコードの情報が入っているようです。
次に2番目のレコードの>を押してみます。
その結果が下の状態になります。

ここからわかることはThisitem演算子とはギャラリーに割り当てられているコレクションのレコードということになります。
また、どのレコードが対象になるかということですが、これを理解するには、ギャラリーの構造を理解する必要があります。
ギャラリーの構造とThisitem
ギャラリーのItem属性にはコレクションを割り当てることになります。割り当てた後ギャラリー内のエリアごとにレコードの情報が表示されます。そのためギャラリーの一つ一つのエリアにそれぞれレコードが割り当てられています。

この割り当てられたレコードのことをThisitemと呼んでいるということですね。

それぞれのエリアごとにレコードが割り当てられていて、それぞれのエリアごとにThisItemの指し示すレコードの内容は違うということになります。
そのため、LabelオブジェクトのText属性にThisItem.列名を入力することで、割り当てられた領域内におけるそれぞれのThisItemの列名になります。


また、>を押した場合は
Select(Parent)
が実行されますが。この時Parent(階層構造で上の構造体を呼ぶ。ここではGallery)であるギャラリーのOnselectからUpdateContext({thisitem:ThisItem})
を持ってくることになりますので、>の
Onselect Select(Parent)
は
UpdateContext({thisitem:ThisItem})
に変換されます。
この時ThisItemは>が押された場所に対応していますので各レコードの>に対応したレコードが反映されるということになります。

selectedとは
では次にselectedを見てみましょう。
ThisItemと同じように変数に入れてみましょう。
UpdateContext({selected:Gallery1.Selected})
で入力できます。
selectedの場合はGalleryを入れる必要がありますので注意が必要です。この時点でselectedはギャラリーの一部(=プロパティ)であるということがわかりますね。

この場合の結果は
以下の通りになります。

ThisItemと同じようにレコードの内容が追加されているほか、さらにレコードデータが入っています。今回はLabel1のレコードを見てみます。

このようにLabel1のプロパティ情報の一部が表示されます。
つまりselectedとは選択されたもののレコード情報とレコードのオブジェクトの情報の一部のレコードと考えられそうですが、selectedはギャラリーオブジェクトの一部であるということのでもう一方踏み込んで調べてみましょう。
ラベルオブジェクトで情報を見てみると次の状態になります。

selectedはギャラリーオブジェクトのプロパティとなります。このselectedは最後に選んだレコードの情報や、レコード内のオブジェクトの情報は入っています。このselectedはあくまでもギャラリーのプロパティであってThisitemとは全く役割が違うということになります。
まとめ
ということでギャラリーのThisitemとselectedを扱いましたが
- ギャラリー内の各レコードの情報をThisItemと表現している
- 各レコードのエリアでレコード情報が変わっている
- ギャラリーのプロパティの一つ
- 最後に選ばれたレコードの情報のほか選択されたレコードのオブジェクト情報の一部が入る
となります。
ただし、Onselectなどで変数にselectedやThisItemを格納する場合、選んだレコード情報ThisItem=selectedになるため、結果的にはほぼ同一の情報になります。
ただし、ギャラリーのレコード情報内でselectedとThisItemを使うと下記のような状態になります。

selectedは選択状態のものThisitemはレコード情報にそれぞれ対応した情報ということになりますので注意が必要となります。