在WPF的列表框中添加项目时是否会调用事件处理程序?
谢谢!
答案 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]);
}
}
还应考虑Josh对可观察收藏品的建议。
答案 1 :(得分:2)
采取不同的方法。创建一个ObservableCollection(确实有event)并将ListBox的ItemsSource设置为此集合。换句话说,在WPF中,您应该以不同的方式思考问题。控件不一定是被修改的......后面的集合是。
<强>更新强>
根据您对Mitch的回答的评论,该回答表明您的绑定源实际上是一个XML文档,我建议您查看XML文档/元素/等的XObject.Changed事件。这将为您提供有关XML结构本身的更改信息 - 而不是ItemCollection,这是您不应该考虑的实现细节。例如,ItemCollection(或任何INotifyCollectionChanged)不保证每次更改都有单独的事件。如您所述,有时您只会获得一般通知重置通知。