C# 将参数传递给ViewModel构造函数

C# 将参数传递给ViewModel构造函数,c#,wpf,mvvm,mvvm-light,C#,Wpf,Mvvm,Mvvm Light,是否可以将参数传递给ViewModel构造函数?然后,我将使用此参数初始化属性和/或在ViewModel中执行其他操作 有了WinForms我可以 public MyForm(MyParamType myParam) { MyFormProperty = myParam; //etc. } 公共MyForm(MyParamType myParam){ MyFormProperty=myParam; //等等。 } 如何在MVVM模式/使用MVVM Light中执行类似的操作 欢迎

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

有了WinForms我可以

public MyForm(MyParamType myParam) { MyFormProperty = myParam; //etc. } 公共MyForm(MyParamType myParam){ MyFormProperty=myParam; //等等。 } 如何在MVVM模式/使用MVVM Light中执行类似的操作


欢迎提出任何建议。提前谢谢。

我不明白你为什么不能自己创建viewmodel。始终可以创建自己的viewmodel。如果MVVM Light提供了一个viewmodel,那么您可以始终从该viewmodel继承并创建一个重载构造函数。

如果您使用的是MVVM Light(即使我猜您不是),您可以向Messenger注册一个消息处理程序,该处理程序接受您的构造函数参数(或其中的元组),并在需要时更新VM“重建”它。

我建议使用IoC容器并配置容器以在构造时提供参数

例如,以下是WPF中UserControl的典型代码:

public partial class MyDataGridView : IMyListView
{
    public MyDataGridView()
    {
      InitializeComponent();
    }

    public MyDataGridView(MyListViewModel viewModel)
    {
      InitializeComponent();

      DataContext = viewModel;
 }
}
StructureMap为我创建MyListViewModel,因为默认情况下它搜索最贪婪的构造函数,然后提供依赖项。在我的StructureMap配置中,我可以指定MyListViewModel在构造该对象时提供任何必要的参数


对于StructureMap这样的容器,我不必“新建”“向上移动物体。永远

由于所有视图模型在定位器上都是静态的,因此您可以在不更改构造函数的情况下直接访问这些属性。

赞成建议依赖项注入。DI使应用程序更易于单元测试。多谢了,依赖注入可能是最可持续的发展方式。在我四处逛逛并决定使用哪个IoC容器之后,我有一点重构要做。@lazo-上次我四处逛逛时,我发现Ninject最适合IoC,但在应用程序中,在决定共享内核的最佳方式时遇到了问题。感谢您的回复。是的,我最后做了一些类似于你在这里建议的短期解决方案。非常感谢所有回答的人。作为一个临时解决方案,我做了如下操作:
((MyViewModel)MyView.DataContext).MyProperty=myParam--但是,最终将使用IoC容器来处理此问题。