如果我使用这种构造的视图。如何将一些数据传递给DataEditViewModel
?
<Window x:Class="DataEditView">
<Window.DataContext>
<local:DataEditViewModel />
</Window.DataContext>
<Grid>
<!-- ... -->
</Grid>
</Window>
在其他一些视图模型中,我可以调用类似这样的东西:
public void EditCommandExecute() {
var edit = new DataEditViewModel(this._data);
edit.Show();
}
然后在代码后面的DataEditView
构造函数中:
public DataEditView(DataObjectTm dt){
InitializeComponent();
DataContext = new DataEditViewModel(dt);
}
我的解决方案有效,但是一旦我在XAML中设置DataContext
然后在代码后面,我就会有重复的代码。
答案 0 :(得分:1)
如果您需要View Model Constructor的参数,那么您将不得不使用某种类型的依赖注入,并且如果您希望将Design时间数据与runTime数据分开,则必须使用服务将数据传递给ViewModel。其次,从视图模型打开视图对于测试来说非常糟糕,因为在单元测试ViewModel时,它实际上会打开一个窗口,这不是你想要的。
我建议你研究某种IOC容器。 MVVM-Light有一个非常简单的,但它需要一些工作来了解它的作用以及你想如何使用它。这将是我的一个开始的建议。
使用此选项可以创建设计时和运行时界面,在RunTime中传递正确的数据(可能来自数据库),并在设计时发送静态数据。而且,在测试时,您将无法打开视图,您只需检查打开视图的调用是否已发送和接收。希望有所帮助。
以下是我如何执行此操作的示例Best Way to Pass Data to new ViewModel when it is initiated