2016-07-22 7 views
2

В настройках настраиваемого свойства Я пытаюсь вызвать свое пользовательское событие и передать NotifyCollectionChangedAction.Replace в качестве параметра для NotifyCollectionChangedEventArgs, но я получаю System.ArgumentException. Что я делаю неправильно?Передача NotifyCollectionChangedAction.Replace to NotifyCollectionChangedEventArgs завершается с ошибкой

мой заказ событие:

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(); 
      } 
     } 

ответ

2

Довод 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(); 
+1

спасибо я постараюсь –

+1

@ user6625158 Я просто заметил опечатку в моем коде, он должен работать. –

Смежные вопросы