Обработчик событий, который будет вызываться при добавлении элемента в список - PullRequest
11 голосов
/ 11 февраля 2010

Есть ли обработчик событий, который будет вызываться при добавлении элемента в список в WPF?

Спасибо!

Ответы [ 2 ]

21 голосов
/ 11 февраля 2010

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

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

2 голосов
/ 11 февраля 2010

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

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

...