为ListView Items_added添加事件处理程序

在C#Windows窗体应用程序中; 是否有一个ListView控件的事件处理程序,当项目添加到listview项目时会触发?

我会在这里或这里 看到 。 它们或多或少是相同的答案,只是用不同的风格书写。 简短版本,将ItemAdded事件添加到ListViewItemCollection。

你不需要编辑其他来源!

好的:从ListView更改为myListView

很久以前 – 但我搜索没有带有自己的ItemAdd-Function的工具的解决方案! 最好的方法…使用WndProc函数。

消息:LVM_INSERTITEM

http://msdn.microsoft.com/en-us/library/windows/desktop/bb761107%28v=vs.85%29.aspx

//COMMCTRL.H #define LVM_FIRST 0x1000 // ListView messages #define LVM_INSERTITEMA (LVM_FIRST + 7) #define LVM_INSERTITEMW (LVM_FIRST + 77) //edit itemremove (LVM_DELETEITEM) #define LVM_DELETEITEM (LVM_FIRST + 8) 

C# – 实施

 class myListView : ListView { protected override void WndProc(ref Message m){ base.WndProc(ref m); switch (m.Msg){ case 0x1007: //ListViewItemAdd-A System.Diagnostics.Debug.WriteLine("Item added (A)"); break; case 0x104D: //ListViewItemAdd-W System.Diagnostics.Debug.WriteLine("Item added (W)"); break; //edit for itemremove case 0x1008: System.Diagnostics.Debug.WriteLine("Item removed"); break; case 0x1009: System.Diagnostics.Debug.WriteLine("Item removed (All)"); break; default: break; } } } 

现在您可以激活自己的ItemAddedEvent。 我希望能帮助其他有同样问题的人。

gegards raiserle

(编辑:请投票;))

没有事件可以做到这一点。 但您始终可以创建自己的列表框:

 public class MyListView : ListView { public void AddItem(ListViewItem item) { Items.Add(item); if (ItemAdded != null) ItemAdded.Invoke(this, new ItemsAddedArgs(item)); } public EventHandler ItemAdded; } public class ItemsAddedArgs : EventArgs { public ItemsAddedArgs(ListViewItem item) { Item = item; } public object Item { get; set; } } 

另一种方法是将项目保存在ObservableCollection类的实例中,将ListView.ItemsSource设置为该集合并订阅ObservableCollection.CollectionChanged事件。

框架未定义诸如ItemAdded的事件。 但是,请确保访问此变通方法: 观察者模式和扩展ListView事件模型 。 例如,在那里定义了以下事件:

 public event ListViewItemDelegate ItemAdded; public event ListViewItemRangeDelegate ItemRangeAdded; public event ListViewRemoveDelegate ItemRemoved; public event ListViewRemoveAtDelegate ItemRemovedAt;