使用非默认构造函数注入视图模型依赖项

时间:2011-12-03 00:39:51

标签: .net silverlight windows-phone-7 inversion-of-control ninject

在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);
        }

被调用。每次整个控件的绑定属性发生更改时,我都会在bookProgressBar.ProgressBarListBox上设置一个新的DataContext。

我曾经只有一个BookProgressBarViewModel,所以一切都运行正常,如上面的代码片段所示。

现在我想支持不同的BookProgressBarViewModel,所以我引入了一个接口--BBookProgressBarViewModel。

如您所见,BookProgressBarViewModel的构造函数具有参数。

我使用Ninject内核作为IoC容器,它在App.xaml中启动。

如何在IBookProgressBarViewModel中创建IoC容器中定义的相应BookProgressValueChanged的实例?

更新:我更改了一个体系结构,因此我不需要从依赖项属性更改事件处理程序中调用参数化视图模型构造函数。我仍然想听听你对这个问题的建议。

1 个答案:

答案 0 :(得分:0)

为什么不使用IoC容器然后让你的值加载Lazy?然后您的IoC可以注入您的依赖项并创建这些实例,直到您知道它的值,然后您只需在需要时更新它。