向ListBox綁定數據源時,如果數據量過大,可能會使得程序卡死,這是就需要一條一條的向ListBox的數據源中添加記錄了,下面是個小Demo:
1.前台代碼,就是一個ListBox控件
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <ListBox x:Name="listBox"></ListBox> </Grid> </Window>
2.后台代碼,就是不斷的向ListBox的綁定的數據源中添加記錄,這里只是添加了一個描述數字,不斷的調用委托添加數據,如果想停止添加數據時可以寫停止條件。
using System.Collections.ObjectModel; using System.Windows; using System.Windows.Threading; namespace WpfApplication1 { /// <summary> /// MainWindow.xaml 的交互邏輯 /// </summary> public partial class MainWindow : Window { private ObservableCollection<string> _numberDescriptions; public MainWindow() { InitializeComponent(); Loaded += MainWindow_Loaded; } private void MainWindow_Loaded(object sender, RoutedEventArgs e) { _numberDescriptions = new ObservableCollection<string>(); listBox.ItemsSource = _numberDescriptions; Dispatcher.BeginInvoke(DispatcherPriority.Background, new LoadNumberDelegate(LoadNumber), 1); } private void LoadNumber(int number) { _numberDescriptions.Add("Number " + number); Dispatcher.BeginInvoke(DispatcherPriority.Background, new LoadNumberDelegate(LoadNumber), ++number); } private delegate void LoadNumberDelegate(int number); } }
3.效果圖