Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Prism 7中自动创建ViewModel_C#_Wpf_Prism - Fatal编程技术网

C# 如何在Prism 7中自动创建ViewModel

C# 如何在Prism 7中自动创建ViewModel,c#,wpf,prism,C#,Wpf,Prism,我已经使用带Unity的Prism7创建了一个小型测试WPF.net框架解决方案。在我唯一的模块中,我有一个视图和一个ViewModel。我没有在视图上使用AutoWireViewModel属性。相反,我在视图上有一个构造函数,它将我的ViewModel作为参数: public partial class ViewA : UserControl { public ViewA(ViewAViewModel viewModel) { InitializeCompone

我已经使用带Unity的Prism7创建了一个小型测试WPF.net框架解决方案。在我唯一的模块中,我有一个视图和一个ViewModel。我没有在视图上使用AutoWireViewModel属性。相反,我在视图上有一个构造函数,它将我的ViewModel作为参数:

public partial class ViewA : UserControl
{
    public ViewA(ViewAViewModel viewModel)
    {
        InitializeComponent();
        DataContext = viewModel;
    }
}
当我运行应用程序时,这是可行的,但我不明白如何运行。如果我没有将ViewModel添加到Unity容器中,它是如何解析的?这是默认的棱镜魔法吗?如果是,是否有描述的地方


如果您有任何见解,我们将不胜感激。

所有Prism容器都配置为自动将具体类型解析为瞬态。这就是允许Prism解析任何ViewModel的原因,无论您是否已注册它。

添加一个调试程序,并查看ViewModel构造函数的on-constructor调用堆栈或调用堆栈如下所示:Module1.dll!Module1.ViewModels.ViewAViewModel.ViewAViewModel()第22行C#[外部代码]Module1.dll!Module1.Module1.OnInitialized(Prism.Ioc.IContainerProvider containerProvider)第13行C#[外部代码]Prism7Test.exe!Prism7Test.App.InitializeModules()第32行C#[外部代码]似乎是由Prism完成的。但我不明白你为什么要这样做,或者你是不是要这样做?看起来很奇怪,VM是在未在Unity容器中注册的情况下构建的。Unity解析具体类型时未注册。如何创建
ViewA
实例?我明白了!谢谢我并没有真正理解AutoWireViewModel的意义,因为使用上面的模式设置视图的datacontext非常容易。另外,我不必遵守任何惯例。但也许我遗漏了什么。