是否可以将参数传递给ViewModel构造函数?然后,我将使用此参数初始化属性和/或在ViewModel中执行其他操作。
使用WinForms,我可以做到
public MyForm(MyParamType myParam) { MyFormProperty = myParam; //etc. }
如何在MVVM模式中使用MVVM Light做类似的事情?
任何建议都会受到欢迎。提前谢谢。
答案 0 :(得分:4)
我建议使用IoC容器并配置容器以在构造时提供参数。
例如,这是在WPF中对我来说UserControl的典型代码隐藏:
public partial class MyDataGridView : IMyListView
{
public MyDataGridView()
{
InitializeComponent();
}
public MyDataGridView(MyListViewModel viewModel)
{
InitializeComponent();
DataContext = viewModel;
}
}
StructureMap为我创建MyListViewModel,因为默认情况下它会搜索最贪婪的构造函数,然后提供依赖项。在我的StructureMap配置中,我可以指定为MyListViewModel提供构造该对象时所需的任何参数。
使用像StructureMap这样的容器,我不需要“新”对象。永远。
答案 1 :(得分:3)
如果您正在使用MVVM灯(即使您不是我猜),您可以使用Messenger注册消息处理程序,该处理程序获取构造函数参数(或其元组)并在需要“重建”时更新VM “它。
答案 2 :(得分:1)
由于所有视图模型在定位器上都是静态的,因此您只需访问这些属性而无需更改构造函数。
答案 3 :(得分:-1)
我不明白为什么你不能自己创建viewmodel。您始终可以创建自己的视图模型。如果MVVM Light提供了一个viewmodel,那么你总是可以从那个继承并创建一个重载的构造函数。