Динамическое изменение ViewModel представления в реализации MVVM, MEF

#silverlight-4.0 #mvvm #mef

#silverlight-4.0 #mvvm #mef

Вопрос:

У меня есть пользовательский элемент управления, который я хочу использовать во всем моем решении Silverlight MEF MVVM. Я хочу иметь возможность связать его с одной из нескольких ViewModels в зависимости от того, в каком модуле я нахожусь. Что делает этот элемент управления, так это перечисляет записи данного объекта, чтобы я мог добавлять, редактировать или удалять. Я понял, что буду использовать этот элемент управления в нескольких местах — для обновления нескольких таблиц поиска, поэтому я решил сделать его ViewModel динамическим. Как видно ниже, я использую плагин Galasoft MVVM.

 if (!GalaSoft.MvvmLight.ViewModelBase.IsInDesignModeStatic)
            {
                // set DataContext
                DataContext = PluginCatalogService.Instance.FindSharedPlugin(ViewModelTypes.ViewModelMT, PluginType.ViewModel);
                _viewModel = (ViewModelMT)DataContext;
            }     
 

Мой вопрос в том, как я могу динамически переключаться с ViewModelMT на ViewModelCT, чтобы я мог независимо отображать таблицы поиска, например, типы обслуживания и типы контрактов на экземпляре этого же usercontrol? Я взглянул на локатор Viewmodel, но я все еще не уверен, как это сделать.

Спасибо

Ответ №1:

Я не думаю, что это действительно ViewModel. Это скорее проблема обслуживания.

Ваша ViewModel для элемента управления не изменится, но вы будете динамически подключать необходимую службу для поддержания вашего list. ie. MaintenanceTypeService и ContractTypesService реализуют IListMaintenanceService, который предоставляет список элементов и команды добавления, удаления и редактирования.