C# 将参数传递给ViewModel构造函数
是否可以将参数传递给ViewModel构造函数?然后,我将使用此参数初始化属性和/或在ViewModel中执行其他操作 有了WinForms我可以 public MyForm(MyParamType myParam) { MyFormProperty = myParam; //etc. } 公共MyForm(MyParamType myParam){ MyFormProperty=myParam; //等等。 } 如何在MVVM模式/使用MVVM Light中执行类似的操作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。如果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容器来处理此问题。