Исключение WPF ObservableCollection и Listbox.itemsource
Редактирование всего этого поста, чтобы уточнить... Я не могу прибить это:
BackgroundWorker получает данные от службы WCF, которая представляет собой список объектов. Ссылка на службу настроена как ObservableCollection.
Я передаю ObservableCollection через делегата в мой основной поток пользовательского интерфейса и устанавливаю его равным потокам пользовательского интерфейса Local Collection.
Список привязан к этой локальной коллекции и не обновляется. Я добавил следующее в свою коллекцию:
public ObservableCollection<EmployeeData> _empData { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<EmployeeData> EmpData
{
get { return _empData ; }
set
{
_empData = value;
OnPropertyChanged("EmpData");
}
}
private void OnPropertyChanged(string p)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(p));
}
Это даже срабатывает, но PropertyChanged всегда имеет значение null. Мой список XAML имеет привязку, объявленную как:
ItemsSource="{Binding Path=EmpData}"
Независимо от того, что я делаю, EmpData обновляет, но ListBox не делает, я пробовал несколько других методов, но в списке ничего не меняется, он всегда просто нулевой.
Я работаю над этим уже более суток, и я не могу заставить все это автоматическое обновление "щелкнуть".
1 ответ
Я не уверен, что я точно понимаю, что вы делаете, но вот пара предложений.
- Иметь одну коллекцию ObservableCollection
- Свяжите свою коллекцию предметов (или список, или что-то еще) с этим
- В зависимости от пользователя очистите и заполните эту наблюдаемую коллекцию данными списка
- Пусть фоновый работник обновит список и обновит наблюдаемую коллекцию, если что-то изменилось.
В идеале ваш класс EmployeeData будет реализовывать интерфейс INotifyPropertyChanged, чтобы изменения свойств автоматически обновлялись в вашем представлении.