Xamarin.FormsのListViewで行選択時のハイライト表示をなしにする@iOS

ListViewはいまだにCanProperty的なものを実装してくれてなさげですが、とりあえずタップしたらすぐSelectedItem=nullにするような感じでごまかしてたらAppleから何もしないんだったら一瞬でもハイライト表示するんじゃねぇとリジェクトされました(-_-;)


のでハイライト表示をしないようにするのをググってたら
Listview Selected Item Background Color — Xamarin Community Forums
を見つけてRenderer作って背景色など透明にすることで回避できました!その下にあるSelectionStyleを変えるやつのほうがよりエレガントですが、試してません。
Androidの方は同じリンクにActivatedHighlightをtransparentに…とありますが、試してません。


これで勝つる!…と思ってたのですが、二つあるビューのうち一つがまだタップするとハイライト表示されてしまう…
何でだろうと思ってたらCachingStyle="RecycleElement"にしてたのがいけないっぽい。
のでRetainElementに変えたらハイライト表示はされなくなった!が今度はCustomViewのBindablePropertyがうまく更新されない。


この辺はぴーさんが調べてくださったところがらみと思われですが、ModeをTwowayにしても解決せず。


結局ListView Performance - Xamarin | Microsoft DocsにあるようにOnElementPropertyChangedをoverrideしてSetNeedDisplay()することで更新もうまくいくようになりました。といってもそれRecycleElementの時はそうしろって言ってる気がするんですが、いまRetainElement…


まとめると
・ListViewのハイライト表示をiOSでモニョモニョするならRenderer使う。
・がそのRendererはCachinStrategy=RecycleEleementにしてると効かないっぽい。
・RetainElementにすると今度はCustomViewのBindablePropertyがうまく更新されない。
・BindablePropertyがうまく更新されないのはRenderer側でOnElementPropertyChangedをoverrideしてSetNeedDisplay()で更新されるようになる。


となります。
RecycleElementだと最初のRendererでHighlightモニョモニョするのがうまくいかないのは何かやり方が悪いのかもだけど、忙しいので調査は後日…
うー実案件でXamarin.Forms使うつもり何だけれどだんだん心配になってきた(;´∀`)
ちなみにXamarin.Formsのバージョンは現時点最新の2.0.1.6505です。
Xamarinの中の人、超がんがれ。