Моя реализация WPF ViewModelLocator не соответствует композиции в моей надстройке VSTO Excel. Кто-нибудь может критиковать? - PullRequest
0 голосов
/ 17 октября 2011

Справочная информация:

Я использую MEF, чтобы помочь создать надстройку Excel 2007 (VSTO), которая может создать объект из данных электронной таблицы, и требование ползучести выявило недостаток вмоя архитектура, которую я пытаюсь согласовать (теперь мне нужно идентифицировать столбцы при «загрузке шаблона», а не при «отправке рабочего листа»)

Каждое из моих свойств локальной сущности украшено атрибутом DescriptionAttribute, который содержитимя столбца в моей рабочей таблице.При отправке я размышляю над этими атрибутами, чтобы определить, какое свойство сопоставляется с этим столбцом таблицы, и создать словарь пар, который сопоставляет PropertyName с порядковым номером столбца.Я делаю это потому, что объектная модель Excel COM, по-видимому, предоставляет только ячейки рабочего листа на основе порядковых номеров строк / столбцов.Выполнение этого сопоставления позволяет моей надстройке динамически определять местонахождение моих свойств на листе без необходимости поддерживать статическое сопоставление свойств и порядкового номера.

Итак, все это было хорошо и хорошо ... и, поскольку это временное решение для нашего делового партнера, пока мы реорганизуем базовую систему, мы обсуждали, что это будет очень «недружественным» дополнением.и все были на борту.Но теперь у бизнеса есть проблемы с проверкой некоторых справочных данных, которые будут отображаться на листе.Мы договорились о том, что проверка будет выполняться при отправке, но это изменилось, и мне потребовалось привязать столбцы ссылок к раскрывающимся спискам проверки, которые содержат только допустимые значения.

Проблема

Итак, теперь мне нужно было реструктурировать мои View и ViewModel таким образом, чтобы сопоставление столбцов с их свойствами сущности происходило при загрузкеПосмотрите, и вот тут начались проблемы.Я реализовал Джош Смит RelayCommand из кода, который он сделал доступным, я реализовал Reed Copsey Jr CompositionInitializer для WPF , и я создалViewModelLocator, чтобы помочь моему составному контейнеру найти мою ViewModel ... но что бы я ни делал, я не могу найти соответствующую ViewModel.Я немного обеспокоен этой проблемой в данный момент ... провел все выходные, пытаясь исправить это, но безрезультатно.Может кто-нибудь, пожалуйста, помогите?Я не эксперт MEF.Я баловался с паттерном MVVM, но последние несколько лет я был за пределами C # и пропустил большую часть его эволюции.Я думаю, что весьма вероятно, что моя проблема является фундаментальной, но я слишком долго смотрел на свой код, чтобы найти его.Пожалуйста, помогите.

Код

Я начал публикацию на социальном форуме Microsoft для WPF, где я уже разместил соответствующий код.Если кто-то захочет, чтобы я разместил его здесь, я был бы рад сделать это.Но сейчас я добавлю ссылку на эту ветку.(Я также включил фон в эту тему, но я доволен тем, что здесь. Вы можете пропустить фон, который я включил, и ничего не пропустить)

http://social.msdn.microsoft.com/Forums/en/wpf/thread/f22f081d-e342-4f4e-af41-600cec68f0cd

1 Ответ

0 голосов
/ 17 октября 2011

Я не уверен, окажет ли это какое-либо влияние, но вместо экспорта вашего StopgapViewModel класса создайте фабричный класс и экспортируйте фабричный класс, например:

public StopgapViewModelFactory 
{
    [Export(typeof(StopgapViewModel))]
    public StopgapViewModel Instance
    {
        get
        {
            return new StopgapViewModel();
        }
    }
}

Удалите объявление [Export] из класса StopgapViewModel и попробуйте.

...