0

我认为这是我在这里发言的整体 .NET 经验不足,但我无法弄清楚为什么会发生这种情况。

我的 ModelImportMany是一个名为 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 将能够解析到正确的库,以便以后可以调用正确的函数。
4

1 回答 1

1

这基本上就是闭包和循环在 c# 中的工作方式。

看看这里的好解释

于 2010-06-24T18:28:53.917 回答