Внедрение зависимости модели представления с помощью конструктора не по умолчанию - PullRequest
2 голосов
/ 03 декабря 2011

В приложении 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 Ответ

0 голосов
/ 12 апреля 2012

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

...