值已更改事件处理程序



每当整数值发生变化时,我都想做出反应。那么,是否有可能编写自己的事件处理程序?我需要得到旧值和新值,因为我必须用旧值的索引去引用列表中对象的一些事件,并用新值的索引将这些事件引用到列表项。

像这样的东西(真的很抽象):

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

谢谢。

您可以这样做:

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

唯一接近的是INotifyPropertyChangedINotifyPropertyChanging接口。这些定义了CCD_ 3&CCD_ 4事件。

然而,这些不会给你新的或旧的价值,只是它已经改变了。

通常在属性上定义它们。。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()只是调用事件的私有方法。

相关内容

  • 没有找到相关文章

最新更新