Внедрение зависимости модели представления с помощью конструктора не по умолчанию

В приложении Windows Phone у меня есть пользовательский элемент управления, который привязан к экземпляру BookProgressInfo учебный класс.

<deusControls:BookProgressBar BookProgressValue="{Binding BookProgressInfo}" Width="430" />

Всякий раз, когда BookProgressInfo изменения, а

static void BookProgressValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            var bookProgressBar = (BookProgressBar)sender;

            var progressInfo = (BookProgressInfo) e.NewValue;

            if(progressInfo != null && progressInfo.Id != 0) 
                bookProgressBar.ProgressBarListBox.DataContext = new BookProgressBarViewModel(progressInfo, bookProgressBar.Width);
        }

вызывается. Я устанавливаю новый DataContext на bookProgressBar.ProgressBarListBox каждый раз, когда изменяется связанное свойство для всего элемента управления.

Раньше у меня был только один BookProgressBarViewModel, поэтому все работало нормально, как реализовано в приведенном выше фрагменте.

Теперь я хочу поддержать разные BookProgressBarViewModelс, поэтому я ввел интерфейс - IBookProgressBarViewModel.

Как видите, конструктор для BookProgressBarViewModel имеет параметры.

Я использую ядро ​​Ninject в качестве контейнера IoC, и оно запускается в App.xaml.

Как я могу создать экземпляр соответствующего IBookProgressBarViewModel определяется в контейнере IoC в пределах BookProgressValueChanged?

ОБНОВЛЕНИЕ: Я изменил архитектуру, так что мне не нужно вызывать конструктор модели параметризованного представления из обработчика событий изменения свойства зависимости. Тем не менее, я хотел бы услышать ваши предложения по этому вопросу.

1 ответ

Почему бы все еще не использовать контейнер IoC, а затем сделать ваши значения Lazy Loaded? Затем ваш IoC может внедрить ваши зависимости и создать эти экземпляры, и пока вы не узнаете его значения, вы просто обновите его свойство при необходимости.

Другие вопросы по тегам