Я пытаюсь связать комбинированный список в WPF следующим образом,
<ComboBox Width="350" Margin="5" IsEditable="True" ItemsSource="{Binding ComboboxItems}" DisplayMemberPath="Name">
public List<ExpandoObject> ComboboxItems
{
get
{
return comboboxItems;
}
}
Если я установлю список таким образом в моей модели просмотра,
comboboxItems.Clear();
foreach (ExpandoObject comboboxItem in repository.LoadComboboxItems())
{
comboboxItems.Add(comboboxItem);
}
NotifyPropertyChanged(this, x => x.ComboboxItems);
Кажется, что NotifyPropertyChanged работает, потому что достигнута точка останова в ComboboxItems, но тогда список комбинированного списка не обновляется в GUI. Snoop не показывает ошибок привязки или чего-либо подобного.
При первом обновлении вышеприведенного списка, похоже, он работает, поэтому я не думаю, что это может быть связано с использованием ExpandoObject.
UPDATE:
Использование наблюдаемой коллекции работает, но я хотел бы знать, есть ли у меня сеттер в такой модели представления, которая привязывается к элементу управления в GUI,
public string Database
{
get
{
return importData.Database;
}
set
{
importData.Database = value;
NotifyPropertyChanged(this, x => x.Database);
comboboxItems.Clear();
foreach (ExpandoObject comboboxItem in repository.LoadComboboxItems())
{
comboboxItems.Add(comboboxItem);
}
NotifyPropertyChanged(this, x => x.ComboboxItems);
}
}
Этот сеттер запускается в фоновом потоке? Я спрашиваю, почему установщик заблокирует графический интерфейс, если загрузка элементов из базы данных займет некоторое время?
Именно здесь я ошибся в первый раз, пытаясь использовать ObservableCollection, запустив код в установщике в фоновом потоке с помощью BackgroundWorker. Обновление ObservableCollection вызвало исключение в этих условиях.