我有以下课程
public class ButtonChange
{
private int _buttonState;
public void SetButtonState(int state)
{
_buttonState = state;
}
}
我想在_buttonState
值发生变化时触发事件,最后我想在ButtonChange
中定义一个事件处理程序
请问你帮我吗?
P.S:我不想使用 INotifyPropertyChanged
答案 0 :(得分:7)
怎么样:
public class ButtonChange
{
// Starting off with an empty handler avoids pesky null checks
public event EventHandler StateChanged = delegate {};
private int _buttonState;
// Do you really want a setter method instead of a property?
public void SetButtonState(int state)
{
if (_buttonState == state)
{
return;
}
_buttonState = state;
StateChanged(this, EventArgs.Empty);
}
}
如果您希望StateChanged
事件处理程序知道新状态,您可以从EventArgs
派生自己的类,例如ButtonStateEventArgs
然后使用事件类型EventHandler<ButtonStateEventArgs>
。
请注意,此实现不会尝试使用线程安全。
答案 1 :(得分:1)
基于物业的活动筹集:
public class ButtonChange
{
private int _buttonState;
public int ButtonState
{
get { return _buttonState; }
set
{
if (_buttonState == value)
return;
_buttonState = value;
OnButtonStateChanged();
}
}
public event EventHandler ButtonStateChanged;
private void OnButtonStateChanged()
{
if (this.ButtonStateChanged != null)
this.ButtonStateChanged(this, new EventArgs());
}
}
答案 2 :(得分:0)
帮助自己使用谷歌“c#events msdn”
Events tutorial (C#) - MSDN如果你使用普通的c#。 INotifyPropertyChanged适用于WPF - POCO /简单类型事件不需要它