Я думаю, что это моя общая неопытность .NET, говоря здесь, но я не могу понять, почему это происходит со мной.
Моя модель 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;
}
Проблема в том, что, когда я нажимаю любой элемент меню , всегда вызывается ShowTool () для последнего перечисленного объекта, производного от ISystemSetupEditor.Это как если бы каждая RelayCommand сохраняла одну и ту же ссылку.
Я надеялся, что кто-то может:
- объяснить, почему это происходит, или, по крайней мере, дать мне ключевое слово, чтобы яЯ могу найти его и выяснить это самостоятельно.
- Представить возможные решения - единственное, что я до сих пор придумал, - это управлять отдельным Словарём, где T, U сможет разрешитьправильная библиотека, поэтому нужную функцию можно вызвать позже.