Существует ли обработчик событий, который назовут, когда объект будет добавлен в поле списка в WPF?
Спасибо!
Проблема в том, что интерфейс INotifyCollectionChanged
, который содержит обработчик событий, реализован явно, что означает, что вы должны сначала преобразовать ItemCollection, прежде чем можно будет использовать обработчик событий:
public MyWindow()
{
InitializeComponent();
((INotifyCollectionChanged)mListBox.Items).CollectionChanged +=
mListBox_CollectionChanged;
}
private void mListBox_CollectionChanged(object sender,
NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
// scroll the new item into view
mListBox.ScrollIntoView(e.NewItems[0]);
}
}
Ref .
Совет Джоша о наблюдаемой коллекции также следует учитывать.
Используйте другой подход. Создайте ObservableCollection (у которой действительно есть такое событие) и установите ItemsSource ListBox на эту коллекцию. Другими словами, в WPF вы должны думать о проблеме по-другому. Элемент управления не обязательно является тем, что изменяется... им является коллекция.
UPDATE
Основываясь на вашем комментарии к ответу Митча, который указывает, что ваш источник привязки на самом деле является XML-документом, я предлагаю рассмотреть возможность подключения к событию XObject.Changed XML-документа/элемента/etc. Это даст вам информацию об изменении самой структуры XML - не ItemCollection, которая является деталью реализации, которую вам не нужно рассматривать. Например, ItemCollection (или любой INotifyCollectionChanged) не гарантирует отдельного события для каждого изменения. Как вы отметили, иногда вы просто получите общее уведомление о сбросе.