【发布时间】:2018-01-24 22:51:31
【问题描述】:
出于性能原因,我需要在滚动列表框上使用虚拟化。
我的 XAML:
<Grid>
<StackPanel>
<Button Content="Fill" Click="Button_Click" />
<ListBox ItemsSource="{Binding People}" ScrollViewer.CanContentScroll="True" VirtualizingStackPanel.IsVirtualizing="True">
<ListBox.ItemTemplate>
<DataTemplate>
<VirtualizingStackPanel>
<TextBox Text="{Binding FirstName}" />
</VirtualizingStackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Grid>
我的代码隐藏:
public MainWindow()
{
InitializeComponent();
DataContext = _mainViewModel;
}
MainViewModel _mainViewModel = new MainViewModel();
private void Button_Click(object sender, RoutedEventArgs e)
{
_mainViewModel.FillPeople();
}
我的视图模型:
class MainViewModel : INotifyPropertyChanged
{
public ObservableCollection<Person> People { get; set; }
public MainViewModel()
{
People = new ObservableCollection<Person>();
}
public void FillPeople()
{
for (int i = 0; i < 100; i++)
{
var person = new Person { FirstName = "John" };
People.Add(person);
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
我的数据类:
class Person
{
public string FirstName { get; set; }
}
当我在 Windows 7 和 Windows 10 上运行此代码时,列表会快速正确地填写。当我在 POSReady 2009 SP3(Windows XP 的一个变体)上运行它时,列表框是空白的。使用常规 StackPanel 可以修复它,但我需要虚拟化。有谁知道该怎么做才能让它在 XP 上运行?
【问题讨论】:
标签: c# wpf windows-xp-sp3