У меня есть ItemsControl с VirtualizingStackPanel в виде панели элементов, подобной этой:
<ItemsControl Style="{StaticResource ItemsControl}" Name="itemsControl"
Margin="0,100,0,0" HorizontalAlignment="Stretch" Height="80">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Стиль следующий:
<Style x:Key="ItemsControl" TargetType="ItemsControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ItemsControl">
<ScrollViewer VerticalScrollBarVisibility="Hidden"
HorizontalScrollBarVisibility="Visible">
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Я установил коллекцию из 100 000 элементов как ItemsSource и получил действительно хорошую производительность. Все хорошо, кроме одной вещи. Когда я ввожу текст в одно из текстовых полей, а затем начинаю прокручивать, я вижу, что этот текст появляется повсюду в списке!
Я понимаю, что делает VirtualizingStackPanel . Он постоянно загружает элементы, которые становятся видимыми при прокрутке. Я понимаю некоторые аспекты его техники виртуализации, но понятия не имею, как понять это странное поведение. Мне не удалось найти хорошие документы по виртуализации WPF / Silverlight, поэтому, пожалуйста, объясните мне, что происходит