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