gpt4 book ai didi

wpf - 使用 PRISM 和 MVVM 的 ViewModel 的参数化构造函数

转载 作者:行者123 更新时间:2023-12-03 10:20:06 25 4
gpt4 key购买 nike

我试图在 PRISM 模块上使用 MVVM。我的模块中有一个带有参数化构造函数的 ViewModel,它接受将使用 Ninject 注入(inject)的 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>

当我运行它时, View 的 InitializeComponent() 方法会引发 NullReferenceException。有什么合适的方法来完成这项工作吗?谢谢。

最佳答案

在 View 的代码隐藏中,在构造函数中注入(inject) View 模型。

public partial class HelloWorldView : UserControl
{
public HelloWorldView(HelloWorldViewModel vm)
{
InitializeComponent();
DataContext = vm;
}
}

关于wpf - 使用 PRISM 和 MVVM 的 ViewModel 的参数化构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11912045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com