, но если я использую IEnumerable вместо ObservableCollection, DataBinding не будет работать
Использование IEnumerable
для вашего списка элементов данных не является проблемой, фактически определение длясвойство ItemsSource
в ListBox
:
public IEnumerable ItemsSource { get; set; }
Скорее всего, проблема в том, что ваше свойство не уведомляет об изменении его значения (используйте интерфейс INotifyPropertyChanged
).
Тип ObservableCollection
- это коллекция, которая реализует INotifyCollectionChanged
, поэтому вы можете легко определить, когда изменилась сама коллекция, хотя это не уведомляет вас, когда изменяются свойства самих элементов коллекции.Он также реализует INotifyPropertyChanged, что, скорее всего, связано с тем, что привязка данных работала с вашим свойством в ViewModel.Причина, по которой ObservableCollection
хорошо использовать в этом случае, заключается в том, что вы можете просто добавлять и удалять элементы в коллекции, чтобы обновить элемент управления на основе списка, вам не нужно перепривязывать его (или перестраивать список).
Поэтому, если вы связываетесь со свойством IEnumerable<>
, убедитесь, что вы подняли уведомление об изменении свойства, и помните, что добавление / удаление отдельных элементов не будет автоматически отражено в пользовательском интерфейсе, если вы не примете способуведомление о том, что привязанное свойство изменилось (что было бы немного хаком).