NInject:将参数发送到 ViewModel 类构造函数
我正在开发一个 Windows Phone 7 应用程序并使用 MVVM 模式。我需要将参数传递给页面的 ViewModel 构造函数。我所有的数据上下文和绑定都是在 XAML 中完成的。通过我的研究,我发现我需要使用依赖注入器(例如 NInject)来做到这一点。
以下是有关正在发生的事情的一些详细信息: 我有一个带有 ListPicker 的页面,其中列出了各种任务。每个任务都有一个唯一的TaskID。选择一个项目后,我需要打开另一个页面来显示所选任务的详细信息。如果我在 ViewModel 中使用静态 TaskID,我的 ViewModel 和绑定就全部完成并且可以工作,但当然我需要使用变量。
我已经在项目中设置了 NInject 以及所需的各种类,例如 ViewModelLocator 和我的 NInjectModule,如下所示:
public class LighthouseNInjectModule : NinjectModule
{
public override void Load()
{
this.Bind<TaskViewModel>().ToSelf().WithConstructorArgument("TaskID", 2690);
}
}
请注意,我在此处硬编码了一个 TaskID,并使用此代码将该值正确地注入到我的构造函数中。当然,这是硬编码的,我需要获取所选 ListPicker 项目的 TaskID。我知道如何从 ListPicker 获取选定的 ID,但如何让 NInject 知道它,以便在运行我的类构造函数时它将具有正确的值?
这是我的 ViewModel 类的基本定义,显示了 Injector 属性的使用。
public class TaskViewModel : INotifyPropertyChanged
{
[Inject]
public TaskViewModel(int TaskID)
{
//run function to get data using TaskID
}
}
I am developing a Windows Phone 7 app and am using the MVVM pattern. I have a need to pass a parameter to the contructor of the ViewModel for a page. All my datacontexts and binding are done in XAML. Through my research I've seen that I need to do so using a dependency injector such as NInject.
Here's a little detail on whats going on:
I have a page with a ListPicker that lists various tasks. Each task has a unique TaskID. When an item is selected I need to open another page that will show the selected Tasks detail. My ViewModel and binding is all done and works if I use a static TaskID in the ViewModel but of course I need to use a variable.
I've setup NInject in the project and the various classes needed such as ViewModelLocator and my NInjectModule as shown here:
public class LighthouseNInjectModule : NinjectModule
{
public override void Load()
{
this.Bind<TaskViewModel>().ToSelf().WithConstructorArgument("TaskID", 2690);
}
}
Note that I have hardcoded a TaskID here and using this code this value properly gets injected into my constructor. Of course, this is hardcoded and I need to get the TaskID for the selected ListPicker item. I know how to get the selected ID from the ListPicker but how do I make NInject aware of it so when my class constructor is run it will have the correct value?
Here is the basic definition of my ViewModel class showing use of the Injector attribute.
public class TaskViewModel : INotifyPropertyChanged
{
[Inject]
public TaskViewModel(int TaskID)
{
//run function to get data using TaskID
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
WithConstructorArgument
还有另一个重载,它接受惰性计算的Func
。WithConstructorArgument
has another oveload that accepts a lazy evaluatedFunc<Context, object>
.