我试图在 PRISM 模块上使用 MVVM。我的模块中有一个带有参数化构造函数的 ViewModel,它接受将使用 Ninject 注入的 IOutputService 对象。
namespace HelloWorld.ViewModels
{
public class HelloWorldViewModel : ViewModelBase
{
private IOutputService outputService;
public HelloWorldViewModel(IOutputService outputService)
{
this.outputService = outputService;
}
}
}
在 HelloWorldModule.cs 文件中,我将 IOutputService 注册到一个实现它的类。
public class HelloWorldModule : IModule
{
private IKernel kernel;
private IRegionManager regionManager;
public HelloWorldModule(IKernel kernel, IRegionManager regionManager)
{
this.kernel = kernel;
this.regionManager = regionManager;
}
public void Initialize()
{
kernel.Bind<IOutputService>().To<MessageBoxOutputService>();
regionManager.RegisterViewWithRegion("Region1", typeof(HelloWorldView));
}
}
您还可以注意到我正在将 HelloWorldView 注册到 Region1。HelloWorldView 使用 HelloWorldViewModel。现在的问题是我无法在 View 的 XAML 中初始化 HelloWorldViewModel,因为我的 ViewModel 没有无参数构造函数。
<UserControl x:Class="HelloWorld.Views.HelloWorldView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vm="clr-namespace:HelloWorld.ViewModels"
mc:Ignorable="d">
<UserControl.DataContext>
<vm:HelloWorldViewModel />
</UserControl.DataContext>
<Grid>
</Grid>
</UserControl>
当我运行它时,视图的 InitializeComponent() 方法会引发 NullReferenceException。有什么合适的方法来完成这项工作吗?谢谢。