0

如果我使用这种视图结构。如何将一些数据传递给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);
}

我的解决方案有效,但我有重复的代码,一旦我DataContext在 XAML 中设置,然后在代码后面。

4

1 回答 1

1

如果您需要视图模型构造函数的参数,那么如果您希望将设计时数据与运行时数据分开,您将不得不使用某种类型的依赖注入,以及将数据传递给 ViewModel 的服务 其次,打开一个视图从视图模型对测试来说真的很糟糕,因为在对您的 ViewModel 进行单元测试时,它实际上会打开一个窗口,这不是您想要的。

我建议您查看某种 IOC 容器。MVVM-Light 有一个非常简单的,但是需要一些工作来理解它的作用以及你想如何使用它。这将是我的建议。

使用它,您可以创建设计时和运行时接口,在运行时传递正确的数据(可能来自数据库),在设计时发送静态数据。而且,在测试时,您不会打开视图,您只需检查打开视图的调用是否已发送和接收。希望能有所帮助。

这是我如何在启动时将数据传递给新 ViewModel 的最佳方式的示例

于 2013-11-02T22:47:05.870 回答