読者です 読者をやめる 読者になる 読者になる

雑記 - otherwise

最近はDQ10しかやっていないダメ技術者がちまちまと綴る雑記帳

ItemsControl.ItemTemplate 内で ComboBox を使用する際の data binding のワナ

Silverlight

Silverlight Advent Calendar 2 日目を担当するにあたってネタを考えたのですが、まだ Silverlight を本格的に触り始めて日が浅くこれと言ったTips を持っている訳でもないので、とりあえず今軽く困っている事を書いてみたいと思います。
# こんな事なら意地張らずに Windows Phone でネタ考えておけば良かったかも。 T_T
# もし 2 回目がまわってくる様なら、大人しく Windows Phone か光ちゃんネタ探します。。。
ListBox 等の ItemsControl ベースのコントロールの ItemTemplate 内に ComboBox を配置(イメージ参照)して、この ComboBox の SelectedXXX プロパティに双方向バインド (TwoWay) すると、とても奇妙な挙動を起こします。

  • 仮想化によりコントロールが unload されるタイミングで値が初期化 (SelectedIndex=0) される
  • 同タイミングで SelectedItem の値がクリアされる(バインド状態は保持される)
  • 同タイミングで SelectedValue のバインドが解除される
  • 仮想化による load / unload を繰り返すと値が未初期化状態 (SelectedIndex=-1) になる

WPF4 では発生しない( unload されても値とバインド状態が保持される)ので Silverlight のバグかなぁ、と。。。
しかも、 Silverlight 5 でも再現しなかったので 4 固有(若しくは 4 以下限定)の現象っぽく、 connect にも投げにくくて難儀してます。(今携わっているのが Silverlight 4 の案件なのでバージョンは上げられない><)
どなたか回避策知っていたら教えてください。。。