I持って次のように、以下の項目テンプレートを持つリストボックスを持っているページ:ページのOnNavigatedToイベントに WP7リストボックス項目のスクロール
<ListBox x:Name="test">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid MaxHeight="108" Margin="0,0,0,10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Rectangle Height="108" Grid.Column="0" Fill="{Binding Color}"/>
<Image Source="{Binding Image}" Height="108" Width="108" Grid.Column="1" HorizontalAlignment="Left" Stretch="UniformToFill"/>
<StackPanel Grid.Column="2">
<TextBlock Text="{Binding Title}" TextWrapping="NoWrap" />
<TextBlock Text="{Binding SubHeading}" TextWrapping="NoWrap" />
<TextBlock Text="{Binding Body}" TextWrapping="Wrap" />
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
は、私は、リストの項目のソースを設定します約20項目の観察可能なコレクションに貼り付けます。
リストはすべてうまく表示されますが、リストを上下にスクロールすると、項目がUI上で同期していないように見えます。たとえば、最初のリストアイテムに表示されていたテキストがリストボックスの最後のアイテムに表示され、重複がある場合があります。スワイプするたびにアイテムが異なります。
リストボックスアイテムをデバッグしました。正しいオブジェクトが正しいアイテムにバインドされていることがわかりました。したがって、UIに表示されるものだけが間違っています。
私は、仮想化スタックパネルではなく標準のスタックパネルを明示的に使用してみました。これは、すべてのアイテムがメモリにロードされていることを確認することで回避できます。
私は仮想化の削除が答えだとは思いません。根本的な原因がなければなりません。しかし、私のリストボックスは実際に30以上の項目を含むことは決して受け入れられないかもしれません。
別のページで、私はsilverlightツールキットlonglistselectorで同じことを行い、同じ問題があります。ただし、longlistselectorで仮想化を削除する方法についてはわかりません。
要約すると、スクロールするときにリストボックスアイテムがUIを正しく更新しないという根底にある問題は何ですか?仮想化を削除することが唯一の答えである場合、longlistselectorでこれをどのように行うことができますか?
ありがとうございます。
これはエミュレータまたは実際のWP7デバイスでですか?私はエミュレータ上で多くの視覚的な不具合を見てきました。 –
こんにちは、その両方で。 – FlashAsh99
言及すべきもう一つのことは、グリッド内の最大高さを<= 80px(またはそれ以下)に変更するとうまくいきます。リストボックスは、20個の項目のリストがある80pxより大きいテンプレート項目を処理できないようです。または私は間違っていますか? – FlashAsh99