Обработчик событий, который назовут, когда объект будет добавлен в поле списка

Существует ли обработчик событий, который назовут, когда объект будет добавлен в поле списка в WPF?

Спасибо!

12
задан Dave Clemmer 21 September 2011 в 01:36
поделиться

2 ответа

Проблема в том, что интерфейс 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 .

Совет Джоша о наблюдаемой коллекции также следует учитывать.

22
ответ дан 2 December 2019 в 06:26
поделиться

Используйте другой подход. Создайте ObservableCollection (у которой действительно есть такое событие) и установите ItemsSource ListBox на эту коллекцию. Другими словами, в WPF вы должны думать о проблеме по-другому. Элемент управления не обязательно является тем, что изменяется... им является коллекция.

UPDATE
Основываясь на вашем комментарии к ответу Митча, который указывает, что ваш источник привязки на самом деле является XML-документом, я предлагаю рассмотреть возможность подключения к событию XObject.Changed XML-документа/элемента/etc. Это даст вам информацию об изменении самой структуры XML - не ItemCollection, которая является деталью реализации, которую вам не нужно рассматривать. Например, ItemCollection (или любой INotifyCollectionChanged) не гарантирует отдельного события для каждого изменения. Как вы отметили, иногда вы просто получите общее уведомление о сбросе.

2
ответ дан 2 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: