将NotifyCollectionChangedAction.Replace传递给NotifyCllectionChan

本文关键字:NotifyCllectionChan NotifyCollectionChangedAction Replace | 更新日期: 2023-09-27 17:58:23

在自定义属性setter上,我试图调用我的自定义事件并将NotifyCollectionChangedAction.Replace作为NotifyCollectionChangedEventArgs的参数传递,但我得到了System.ArgumentException。我做错了什么?

我的自定义事件:

public event EventHandler<NotifyCollectionChangedEventArgs> MyEntryChanged;
protected virtual void OnMyEntryChanged(NotifyCollectionChangedEventArgs e)
{
    var handler = MyEntryChanged;
    handler?.Invoke(this, e);
}

我的电话:

private TValue _value;
        public TValue Value
        {
            get { return _value; }
            set
            {
                if (Equals(_value, value)) return;
                _value = value;
                OnMyEntryChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace));
                OnPropertyChanged();
            }
        }

将NotifyCollectionChangedAction.Replace传递给NotifyCllectionChan

参数Replace要求您指定旧项和新项。只需在没有任何项目的情况下调用它就会导致此异常。

在您的情况下,您可以这样调用它:

if (Equals(_value, value)) return;
int indexOfPreviousItem = 0; //wherever you store your item
TValue oldItem = _value;    
_value = value;
OnMyEntryChanged(
    new NotifyCollectionChangedEventArgs(
        NotifyCollectionChangedAction.Replace, 
        value, 
        oldItem,
        indexOfPreviousItem));
OnPropertyChanged();
相关文章:
  • 没有找到相关文章