我认为这是我在这里发言的整体 .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 将能够解析到正确的库,以便以后可以调用正确的函数。