当方法来自接口时,RelayCommand或传递Action <t>的行为是否不同?</t>

时间:2010-06-24 17:32:25

标签: .net-3.5 delegates action relaycommand

我认为这是我在这里发表的总体缺乏经验,但我无法弄清楚为什么会发生这种情况。

我的模型ImportMany是一个名为ISystemSetupEditor的接口,在这种情况下,我有几个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;
}

问题是,当我点击任何菜单项时,始终会调用最后枚举的ISystemSetupEditor派生对象的ShowTool()。就像每个RelayCommand存储相同的引用一样。

我希望有人可以:

  • 解释为什么会发生这种情况,或者至少给我一个关键字,以便我可以查看并自行解决
  • 提出了可能的解决方案 - 到目前为止我唯一提出的解决方案是管理一个单独的字典,其中T,U能够解析到正确的库,以便稍后可以调用正确的函数。 / LI>

1 个答案:

答案 0 :(得分:1)

这基本上就是c#中的闭包和循环是如何工作的。

看看好的解释here