Я использую WPFToolkit datagrid control и выполняю привязку таким образом:
<WpfToolkit:DataGrid x:Name="dgGeneral" SelectionMode="Single"
SelectionUnit="FullRow"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
Grid.Row="1" ItemsSource="{Binding Path=Conversations}" >
public List<CONVERSATION> Conversations
{
get { return conversations; }
set
{
if (conversations != value)
{
conversations = value;
NotifyPropertyChanged("Conversations");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public void GenerateData()
{
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerSupportsCancellation = bw.WorkerReportsProgress = true;
List<CONVERSATION> list = new List<CONVERSATION>();
bw.DoWork += delegate { list = RefreshGeneralData(); };
bw.RunWorkerCompleted += delegate
{
try
{
Conversations = list;
}
catch (Exception ex)
{
CustomException.ExceptionLogCustomMessage(ex);
}
};
bw.RunWorkerAsync();
}
И затем в главном окне я вызываю GenerateData () после установки DataCotext окна для экземпляра класса, содержащего GenerateData ().
RefreshGeneralData () возвращает некоторый список данных, которые мне нужны, и возвращает их быстро.
Всего около 2000 записей и 6 столбцов (я не публикую код, который я использовал во время инициализации сетки, потому что я не думаю, что это может быть причиной), и сетка зависает почти 10 секунд!
---
PS Я нашел проект, который написан подобным образом, но даже привязка 50000 записей выполняется без UI, висят там! Что я делаю не так?
ОБНОВЛЕНИЕ Я думаю, что это из-за ScrollViewer, который содержит всю сетку в нем. Но почему?