Galleryで表示しているコレクションに対して、選択中のアイテムの編集や削除を行う方法を聞かれたので、方法をメモ。
事前準備
今回はこんな感じでコレクションを作成して、それをギャラリーに表示しているときのお話し。
このコレクションの中の、ギャラリーで選択しているアイテムに対し、編集や削除を行う際の式を考えてみる。
選択しているアイテムの編集
選択しているアイテムの編集は簡単で、こんな感じでPatch関数を使用するだけ。
これでボタンを押してみると、
無事、アイテムが編集される。
削除
Remove関数にGalleryのSelectedは指定できない
今回の記事を書く上で大変だったのが、「削除」操作。
編集と同じようにRemove関数を書くと、こんな感じで警告が発生してしまう。
編集と同じようにRemove関数を書くと、こんな感じで警告が発生してしまう。
警告を無視してボタンを押すと、こんなエラーが発生。。。
原因
原因はこんな感じで変数にSelectedプロパティを代入してあげるとわかるんだけど、
Selectedプロパティには、コレクションの情報に加えて、Gallery内の各アイテムのコントロールの情報まで一緒に入っている。。
解決策1:LookUpと一緒に使う
ということで解決策1はLookUp関数と一緒に使うこと。こんな感じで式を書いてあげれば、
選択したアイテムが無事消えてくれる。
ただ、一意値列が存在するコレクションだったらLookUpでいいんだけど、もしすべての列の情報が重複する可能性があるコレクションだった場合、
条件に一致すれば、選択していないアイテムでも消えてしまう。。
これはもうこんな感じですべての列を比較してあげるしかないかなぁと。。
すべての列の内容が一緒であればどっちを消しても同じでしょ、的な乱暴な解決方法。
すべての列の内容が一緒であればどっちを消しても同じでしょ、的な乱暴な解決方法。
解決方法2:ギャラリーのアイテムに削除ボタンを埋め込む
UIを変えてよいのであれば、削除ボタンをギャラリーの中に入れてしまって、Remove関数にThisItemを指定する方法がある。
どうやらThisItemで指定すればエラーにならないようで、ボタンを押すと、
無事アイテムが消える。
基本的にはこっちの方がおすすめかと。
基本的にはこっちの方がおすすめかと。
おまけ:追加
追加は当然Collect関数でOK。
コメント