MVVM模型实例化

时间:2011-05-25 15:12:32

标签: wpf mvvm model instantiation

在WPF MvvmFoundation 之后,将View与ViewModel相关联有很多选择,如http://www.paulstovell.com/mvvm-instantiation-approaches所述。

但是他们的例子没有关于如何将ViewModel与模型相关联。

传统上我首先创建模型,然后创建一个或多个渲染它的视图。似乎MVVM推动人们创建View,它创建了ViewModel,它创建了Model。我希望情况并非如此,因为使用各种ModelView连接复杂的商业模式可能很难。

如何在MVVM中实例化商业模式类,并使用ViewModel 链接

5 个答案:

答案 0 :(得分:11)

我通常将Model对象作为构造函数params传递给VM。我使用App类作为控制器,它将使用主模型初始化MainWindow,MainWindowViewModel。在MainWindowViewModel负责使用适当的模型对象初始化其他VM之后。

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        mainWindow = new MainWindow();
        mainWindow.DataContext = new MainWindowViewModel(new Model());
        mainWindow.Show();
    }

答案 1 :(得分:4)

您在ViewModel中创建了BusinessModel类。

因此,在您的CustomerViewModel中,您会说this.CurrentCustomer = new CustomerModel(),而您的CustomerView会绑定到ViewModel上的CurrentCustomer属性

如果您有兴趣,我会写一个simple sample using MVVM作为View,Model和ViewModel如何互动的示例。

答案 2 :(得分:2)

我使用依赖注入/ MEF来执行此操作。只需将所有模型类一直导出到链中,然后将它们自动导入到ViewModel构造函数中。

答案 3 :(得分:1)

我根据情况采取各种不同的方法。我发现,当涉及到连接这些数据时,一种尺寸并不适合所有。

对于简单的情况,我将使ViewModel与Model相同。显然对所有情况都没那么好,但有时候没有必要加倍努力将M从VM中分离出来。 (非常适用于您拥有缺少信息的列表框项目的情况)

有时,特别是当模型是您无权访问的代码块(由其他开发人员编写)时,很容易将模型子类化,并添加所有VM事物(可观察属性等)它。

最后,我将使用Souvik提到的方法。使用要用作参数的模型信息构造VM,或者允许以其他方式传递VM。对于我更大,更复杂的Model / ViewModel关系,这可能是最常用的方法。

答案 4 :(得分:0)

我使用IoC容器将IRepository实例自动传递给VM构造函数,VM通过此存储库完成模型所需的一切。存储库是一个类:创建,读取,更新和删除数据。当我需要显示一些视图(窗口)时,我使用IViewService.ShowDialog(viewModel As ViewModelBase)。在IViewService的实现中,有向VM注册的视图,因此VM只需要知道其他VM而不是他们的视图(例如"显示此视图模型的视图")。