如何使用参数将View绑定到ViewModel

时间:2013-11-02 22:32:00

标签: c# wpf mvvm

如果我使用这种构造的视图。如何将一些数据传递给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然后在代码后面,我就会有重复的代码。

1 个答案:

答案 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