如何在WPF中组织模型/视图/ ViewModel

时间:2013-06-05 18:29:22

标签: c# wpf mvvm

这一直是我的一个刺激,所以我想我会提出建议。如何在WPF(解决方案资源管理器)中组织模型/视图/ ViewModel?我似乎永远无法找到一个我满意的解决方案,所以我想知道是否有人在那里。

6 个答案:

答案 0 :(得分:14)

除了你的模型应该在他们自己的程序集(项目)中。我倾向于将相关视图和ViewModel放在一个文件夹中,而不是一个名为“Views”的文件夹和另一个名为“ViewModels”的文件夹

比如说:

Project MyApp.Model
    |---> Models


Project MyApp.Client
    |--> Orders
    |      |--> OrderCRUDView
    |      |--> OrderCRUDViewModel
    |      |--> OrderListView
    |      |--> OrderListViewModel
    |--> Accounts
           |--> AccountCRUDView
           |--> AccountCRUDViewModel
           |--> AccountListView
           |--> AccountListViewModel
    ...etc

答案 1 :(得分:13)

  

如何在WPF(解决方案资源管理器)中组织模型/视图/ ViewModel?

我通常将模型放在一个单独的项目中。 MVVM的主要目标之一是将模型与View和ViewModel完全隔离。

View和ViewModel取决于 - 我的个人组织风格因项目范围而异。

对于非常小的项目,我经常为每个“视图”并排显示View和ViewModel。

对于较大的项目,我会将它们分成自己的命名空间(和文件夹),甚至分成单独的项目。将ViewModel放在与View不同的项目中是很好的,因为它可以强制您的ViewModel不会引用View元素,因为您可以完全从该项目中删除所需的引用。

答案 2 :(得分:4)

在一个更大的应用程序中,你可能想把东西扔进不同的程序集中,但我认为这样也可以。

Project MyApp
    |--> Views
    |      |--> AccountsView
    |      |--> OrderView
    |--> Sources
           |--> CustomerData
                  |--> Data
                  |     |--> DataAccess.cs    <-- Provides database search helper methods that return ObservableCollections of "Model" data types for use in the ViewModels.
                  |--> Models
                  |     |--> Account.cs
                  |     |--> Order.cs
                  |--> ViewModels    <-- Having more then one viewmodel for the same data is possible, e.g. Master-Detail scenarios.
                        |--> AccountsViewModel.cs
                        |--> OrderViewModel.cs

答案 3 :(得分:3)

我将它们分成不同的项目然后从那里拆分。基本上是M项目,VM项目,然后将View作为主项目。虽然最终V&amp; VM变得更加紧密耦合。

答案 4 :(得分:2)

我是'解决方案文件夹'的人...

我将给定的V和VM保存在同一个程序集中,并将所有V / VM程序集放在Visual Studio创建的“解决方案文件夹”中。

模型和实用程序类通过程序集隔离,并且也被压入“解决方案文件夹”。

当然,还有一个名为'Infrastructure'的解决方案文件夹,其中包含魔术字符串等等......

解决方案文件夹是合乎逻辑的名称。它们不会在您的驱动器上创建物理文件夹。

答案 5 :(得分:2)

近十年来,这一直是我开展非平凡项目的基本设置,而且它的简单性对我很有帮助。在同一个项目中保持视图和查看模型的可怕做法似乎是一个棱镜事物,但MVVM社区在十年前拍摄了这种反模式。

客户层:

ProjectName.Client.csproj
    --Assets
    --Images
    --Brushes
    --DataTemplates
    --Styles
    --Controls
    --Helpers
    --Views
ProjectName.Client.ViewModel.csproj
    --ModelViews
    --ViewModels
    --Helpers

服务器层:

ProjectName.Server.Services.csproj
ProjectName.Data.csproj
ProjectName.Model.csproj

视图模型层没有引用&#34;模型&#34;项目,因为它存在于服务器层中,并通过数据服务引用的代理公开给视图模型。