web-dev-qa-db-ja.com

WPF:アイテムが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に変更しようとしましたが、変更できませんでした。

あなたが私を助けてくれることを願っています。前もって感謝します。

17
Dante

これはWPFリストビューでのみ機能することに注意してください!

いくつかの調査の後、私は私の質問に対する答えを見つけました、そしてそれは本当に簡単です:

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列挙型を使用すると、プログラムは、追加、移動、置換、削除、リセットなどの変更について通知することができます。

54
Dante