代码之家  ›  专栏  ›  技术社区  ›  Dave

当方法来自接口时,relaycommand或传递操作的行为是否不同?

  •  0
  • Dave  · 技术社区  · 14 年前

    我认为这是我在这里所说的全部.NET经验不足,但我不明白为什么会发生在我身上。

    我的模型 ImportMany 是一个名为isSystemSetupEditor的接口,在本例中,我有几个部分 Export 那个接口。

    在应用程序的ViewModel中,我有一个方法,它创建一个菜单,并在 IEnumerable<ISystemSetupEditor> 要填充菜单项,请执行以下操作:

    private ObservableCollection<WPFMenuItem> CreateSystemSetupItems()
    {
        ObservableCollection<WPFMenuItem> menu = new ObservableCollection<WPFMenuItem>();
    
        foreach(ISystemSetupEditor editor in _model.SystemSetupEditors) {
            WPFMenuItem menuitem = new WPFMenuItem( editor.GetName());
            menuitem.Command = new RelayCommand( () => editor.ShowTool());
            menu.Add( menuitem);
        }
    
        return menu;
    }
    

    问题是,当我点击 任何 始终调用最后一个枚举的IsSystemSetupEditor派生对象的showtool()菜单项。就好像每个relaycommand都存储着相同的引用。

    我希望有人能:

    • 解释为什么会发生这种情况,或者至少给我一个关键词,这样我就可以自己查出来。
    • 提出可能的解决方案——目前为止我唯一想到的是管理一个单独的字典,其中t,u可以解析到正确的库,以便稍后调用正确的函数。
    1 回复  |  直到 14 年前
        1
  •  1
  •   Community uzul    7 年前

    这就是闭包和循环在C中的工作原理。

    看看好的解释 here