我正在学习 C#,我刚刚遇到事件,我正在阅读以下代码:
class ACommand : ICommand
{
public ACommand()
{
Model.Duck.Weight.PropertyChanged += (sender, args) =>
{
if (CanExecuteChanged != null)
{
CanExecuteChanged(this, new EventArgs());
}
};
}
public bool CanExecute(object parameter)
{
//some code
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
//some code
}
}
大部分我都听懂了,但我没真正听懂的是那部分:
Model.Duck.Weight.PropertyChanged += (sender, args) =>
{
if (CanExecuteChanged != null)
{
CanExecuteChanged(this, new EventArgs());
}
};
- 这段代码是否只是告诉程序,只要鸭子的体重发生变化,它就应该执行 CanExecute 方法,并警告所有受此命令约束的人?
- 还有,当鸭子变了,我是不是应该退订老鸭子,订阅新鸭子?因为如果我不退订只订阅新的鸭子,当有变化时旧的鸭子仍然会收到通知,或者我错了吗? (任何人都可以告诉我如何在 Model.Duck 更改时取消订阅老鸭子吗?谢谢。
请您参考如下方法:
PropertyChanged 是由 Model.Duck.Weight 触发的事件的名称。 使用 += 您将向事件添加接收者。您可以在此处添加现有函数,就像 Windows 窗体所做的那样:
Button1.Click += this.Button1_Click;
与
void Button1_Click(object sender, EventArgs e)
但在您的情况下,不是提供具体函数,而是将匿名函数添加为 PropertyChanged 事件的处理程序:
(sender, args) => { //do something }
在函数内部(my//do something 所在的位置),您触发自己的事件 CanExecuteChanged。检查 null 可确保其他人已将事件处理程序添加到您的事件中,如果是,您只需触发它。
PS:取消订阅的方式正好相反:
PropertyChanged -= <the function handling the event>