Skip to main content
 首页 » 编程设计

C# I命令语法

2024年06月03日6shangdawei

我正在学习 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()); 
    } 
}; 
  1. 这段代码是否只是告诉程序,只要鸭子的体重发生变化,它就应该执行 CanExecute 方法,并警告所有受此命令约束的人?
  2. 还有,当鸭子变了,我是不是应该退订老鸭子,订阅新鸭子?因为如果我不退订只订阅新的鸭子,当有变化时旧的鸭子仍然会收到通知,或者我错了吗? (任何人都可以告诉我如何在 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>