Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.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
Wpf 如果ViewModel需要参数,如何在设计时绑定视图和ViewModel_Wpf_Xaml_Mvvm_Caliburn.micro - Fatal编程技术网

Wpf 如果ViewModel需要参数,如何在设计时绑定视图和ViewModel

Wpf 如果ViewModel需要参数,如何在设计时绑定视图和ViewModel,wpf,xaml,mvvm,caliburn.micro,Wpf,Xaml,Mvvm,Caliburn.micro,我用的是Caliburn.Micro框架。 在其上,据说: 您必须设置Desinger DataContext,并告诉CM在您的视图XAML中启用其魔力: <Window xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:vm="clr-n

我用的是Caliburn.Micro框架。 在其上,据说:

您必须设置Desinger DataContext,并告诉CM在您的视图XAML中启用其魔力:

 <Window 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:vm="clr-namespace:CaliburnDesignTimeData.ViewModels"
    xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform"
    mc:Ignorable="d" 
    d:DataContext="{d:DesignInstance Type=vm:MainPageViewModel, IsDesignTimeCreatable=True}"
    cal:Bind.AtDesignTime="True">

要使其工作,ViewModel必须具有默认构造函数。如果这不合适,还可以使用ViewModelLocator进行设计时ViewModel创建


我希望使用参数创建ViewModel。如何使用ViewModelLocator?

这是一篇关于Caliburn.Micro设计时支持的好文章。


基本上,您可以使用ViewModelLocator(实现并用作转换器)通过Caliburn的内置SimpleContainer实例化ViewModels,将ViewModel实例绑定到d:DataContext。这样,您就可以使用容器设置依赖项,只需使用IoC.Get()创建视图模型的实例,并在IValueConverter.Convert()方法中返回它。

我已经找到了,谢谢。您认为在ViewModel项目中定义IoC是一个好主意吗?在本文中,他实例化了一个新的SimpleContainer,并将IoC的GetInstance、GetAllInstances和generic委托重新分配给新创建的SimpleContainer的匹配方法。我相信如果您不想创建自定义的IoC,您可以在AppBootstrapper上重用已经设置好的IoC(因为它在Initialize()中实现了这一点)。