将参数传递给ViewModel构造函数

时间:2010-09-29 03:22:52

标签: c# wpf mvvm mvvm-light

是否可以将参数传递给ViewModel构造函数?然后,我将使用此参数初始化属性和/或在ViewModel中执行其他操作。

使用WinForms,我可以做到

public MyForm(MyParamType myParam) {
    MyFormProperty = myParam;
    //etc.
}

如何在MVVM模式中使用MVVM Light做类似的事情?

任何建议都会受到欢迎。提前谢谢。

4 个答案:

答案 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,那么你总是可以从那个继承并创建一个重载的构造函数。