向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.效果圖

