2012-04-01 8 views
2

정수 값이 변경 될 때마다 반응하고 싶습니다. 그렇다면 자체 이벤트 처리기를 작성할 수 있습니까? 이전 값의 색인으로 목록의 객체에 대한 일부 이벤트의 참조를 해제하고 이러한 값을 새로운 값의 색인으로 listitem에 참조해야하기 때문에 이전 값과 새 값을 가져와야합니다. 이 같은값이 변경된 이벤트 핸들러

뭔가 (정말 추상적 인) :

value.Changed += new Eventhandler(valuechanged); 
private void valuechanged(object sender, eventargs e) 
{ 
    list[e.Oldvalue] -= some eventhandler; 
    list[e.newValue] += some eventhanlder; 
} 

감사합니다.

+0

을 가능한 중복 : http://stackoverflow.com/questions/7677854/notifypropertychanged-event-where-event-args-c ontain-the-old-value –

답변

8

이 같은 수행 할 수 있습니다

class ValueChangedEventArgs : EventArgs 
{ 
    public readonly int LastValue; 
    public readonly int NewValue; 

    public ValueChangedEventArgs(int LastValue, int NewValue) 
    { 
     this.LastValue = LastValue; 
     this.NewValue = NewValue; 
    } 
} 

class Values 
{ 
    public Values(int InitialValue) 
    { 
      _value = InitialValue; 
    } 

    public event EventHandler<ValueChangedEventArgs> ValueChanged; 

    protected virtual void OnValueChanged(ValueChangedEventArgs e) 
    { 
      if(ValueChanged != null) 
       ValueChanged(this, e); 
    } 

    private int _value; 

    public int Value 
    { 
     get { return _value; } 
     set 
     { 
      int oldValue = _value; 
      _value = value; 
      OnValueChanged(new ValueChangedEventArgs(oldValue, _value)); 
     } 
    } 
} 

그래서 당신이 여기처럼 클래스를 사용할 수 있습니다 (콘솔 테스트) :

void Main() 
{ 
    Values test = new Values(10); 

    test.ValueChanged += _ValueChanged; 

    test.Value = 100; 
    test.Value = 1000; 
    test.Value = 2000; 
} 

void _ValueChanged(object sender, ValueChangedEventArgs e) 
{ 
    Console.WriteLine(e.LastValue.ToString()); 
    Console.WriteLine(e.NewValue.ToString()); 
} 

이 인쇄됩니다

Last Value: 10 
New Value: 100 

Last Value: 100 
New Value: 1000 

Last Value: 1000 
New Value: 2000 
+0

은 int 클래스에 일부 코드를 덮어 쓰거나 추가 할 수 있습니까? – roqstr

+0

@roqstr 아니요, 값 유형을 상속받을 수 없습니다. –

+1

어쨌든 ok thx는 훌륭합니다! – roqstr

1

가까운 곳에서 유일한 것은 INotifyPropertyChangedINotifyPropertyChanging 인터페이스입니다. 이것들은 각각 PropertyChanged & PropertyChanging 이벤트를 정의합니다.

그러나 이러한 변경 사항은 변경되었거나 변경된 새 값이나 이전 값을 제공하지 않습니다.

당신은 일반적으로 .. 속성을 정의 ALA :

private int _myInt; 
public int MyInt 
{ 
    get 
    { 
     return this._myInt; 
    } 

    set 
    { 
     if(_myInt == value) 
      return; 

     NotifyPropertyChanging("MyInt");  
     this._myInt = value; 
     NotifyPropertyChanged("MyInt"); 
     } 
    } 
} 

참고 : NotifyPropertyChanging() & NotifyPropertyChanged()이 이벤트를 호출 단지 개인 방법이 있습니다.