在列表框中添加项目时将调用的事件处理程序

时间:2010-02-11 05:56:52

标签: wpf listbox event-handling

在WPF的列表框中添加项目时是否会调用事件处理程序?

谢谢!

2 个答案:

答案 0 :(得分:21)

问题是显式实现了包含事件处理程序的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

还应考虑Josh对可观察收藏品的建议。

答案 1 :(得分:2)

采取不同的方法。创建一个ObservableCollection(确实有event)并将ListBox的ItemsSource设置为此集合。换句话说,在WPF中,您应该以不同的方式思考问题。控件不一定是被修改的......后面的集合是。

<强>更新
根据您对Mitch的回答的评论,该回答表明您的绑定源实际上是一个XML文档,我建议您查看XML文档/元素/等的XObject.Changed事件。这将为您提供有关XML结构本身的更改信息 - 而不是ItemCollection,这是您不应该考虑的实现细节。例如,ItemCollection(或任何INotifyCollectionChanged)不保证每次更改都有单独的事件。如您所述,有时您只会获得一般通知重置通知。