c# - WPF:在 ListView 中添加项目时引发事件

标签 c# wpf events listview

我在 WPF 上工作,我正在使用 ListView,我需要在向其中添加项目时触发一个事件。我试过这个:

var dependencyPropertyDescriptor = DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof(ListView));
        if (dependencyPropertyDescriptor != null)
        {
               dependencyPropertyDescriptor.AddValueChanged(this, ItemsSourcePropertyChangedCallback);
        }

.....

 private void ItemsSourcePropertyChangedCallback(object sender, EventArgs e)
    {
         RaiseItemsSourcePropertyChangedEvent();
    }

但是它似乎只有在整个集合被更改时才有效,我已经阅读了这篇文章:event-fired-when-item-is-added-to-listview ,但最佳答案仅适用于 listBox。我试图将代码更改为 ListView,但我无法做到这一点。

我希望你能帮助我。提前谢谢你。

最佳答案

请注意,这仅适用于 WPF ListView !

经过一番研究,我找到了我的问题的答案,而且非常简单:

public MyControl()
{
    InitializeComponent();
    ((INotifyCollectionChanged)listView.Items).CollectionChanged +=  ListView_CollectionChanged;
}

private void ListView_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)     
{
    if (e.Action == NotifyCollectionChangedAction.Add)
    {
      // scroll the new item into view   
      listView.ScrollIntoView(e.NewItems[0]);
    }
}

实际上,NotifyCollectionChangedAction 枚举允许您的程序通知您任何更改,例如:添加、移动、替换、删除和重置。

关于c# - WPF:在 ListView 中添加项目时引发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10884031/

相关文章:

c# - 将 WPF 窗口停靠到屏幕窗口的左侧/右侧 7/8

delphi - 如何为表单测试伪造输入?

javascript - 如何从 Firefox 扩展中捕获页面标题的变化

java - 使用 addActionListener() 的 ActionPerformed 和 Netbeans 生成的 ActionPerformed 之间有什么区别?

c# - Rss 0.92 与.NET 联合提要?

wpf - 为代码隐藏中的类型设置默认样式

c# - 输入字符串的格式不正确?

c# - Windows 8 上列表框项目选择周围的白框

c# - 如何在 Asp.Net Core 中注册同一接口(interface)的多个实现?

c# - 规范模式实现帮助