WPF中MVVM的项目结构
在WPF中使用MVVM时,最终的项目结构是什么?
从我现在看到的教程中,他们通常有文件夹:Model,ModelView和View。
在模型中,你把像Person这样的类放在捕获数据和逻辑的地方。
在ModelView中,您可以实例化在Model中定义的类。 该视图包含.xaml文件。
编辑:我编辑我原来的post发送一个示例项目结构。 我有这个问题。 如何组织这些:App.config App.xaml MainWindow.xaml
我应该像现在一样离开他们,还是应该把他们放在一个文件夹里?

 您已经描述了常用或常用的文件夹布局。 根据经验,我更喜欢为模型数据types添加一个单独的文件夹(或大型应用程序中的项目),例如您提到的典型Person类。 我这样做的原因是因为这经常成为最大的项目之一。 我也将它分成以下子文件夹: 
 DataTypes Collections Enums Interfaces 
 我还为应用程序Converter类,扩展方法类,实用程序(或服务)类提供单独的文件夹(或大型应用程序中的项目)。 最后,我有几乎与应用程序文件夹结构相匹配的testing项目。 总的来说,这大致是我的文件夹的样子: 
 Solution Third Party Libraries <<< (Solution Folder) StartUp Project Images Resources Converters DataTypes Collections Enums Interfaces <<< (For Data Type classes) Extensions Models Data Controllers Data Providers Interfaces <<< (For swapping Model classes out in test projects) Utilities (Or Services) Interfaces <<< (For swapping Utilities classes out in test projects) View Models Commands Views Attached Properties Controls 
更新>>>
 像文件夹一样,项目只是提供分离的层次。 他们还帮助我绘制出我的应用程序名称空间。 例如, Collections文件夹/项目中的代码类将位于ApplicationName.DataTypes.Collections命名空间中。  Data Providers文件夹/项目中的类将具有ApplicationName.Models.DataProviders命名空间。 
 此外,在大型应用程序中,我的项目名称来自它们在此层次结构中的位置…例如,我的DataTypes项目实际上称为ApplicationName.DataTypes而我的Models项目称为ApplicationName.Models 。  Collections和数据提供者部分是文件夹,以及所有第二级以上的项目,例如。  Enums , Images , Commands等 
大多数人使用你提到的“标准”结构:
-  模型/
- CarModel.cs
- DriverModel.cs
 
-  视图模型/
- CarViewModel.cs
- DriverViewModel.cs
 
-  视图/
- CarView.xaml
- DriverView.xaml
 
我认为它受欢迎的原因是因为有些人会争辩说,你应该能够把Models,ViewModels和Views放在不同的程序集中。
 也有了这个结构,您可以轻松地为其他WPF的东西添加文件夹: Converters/ , Resources/等 
在我的团队中,我们使用这种结构,但我们复数名称(如Models / ViewModels / Views)。
 但是,大多数情况下,模型类是在其他程序集/名称空间中定义的; 在这种情况下,我们甚至没有Models/文件夹。 
 对于大型项目,我们将子文件夹添加到Models/ , ViewModels/和Views/ 
为了完整起见,值得一提的是,你可能会发现一些使用“特征驱动”结构的人:
-  汽车/
- CarModel.cs
- CarViewModel.cs
- CarView.xaml
 
-  驱动器/
- DriverModel.cs
- DriverViewModel.cs
- DriverView.xaml
 
但是这是非常罕见的。
朋友们,我发现类似于这个问题的解决scheme是创build一个单独的项目,WPFtypes,我称为启动,只与App.xaml(和App.xaml.cs)。
其中我指的是View和ViewModel的项目。 所以这个观点没有依赖性,ViewModel只能“看”到View和Business。
在App.xaml.cs声明和实例化我的MainWindow,然后加载我的应用程序的一些基本属性,并导航到页面login(我正在与一个窗口和浏览其中的几个页面)。
  
 
我通常会这样做:
- 主要应用程序(.exe) – 全局风格等
- Common WPF – WPF的基类和助手
- Common Lib General – 基础类和模型的助手
- 基础架构 – dependency injection,日志logging等
- VM的接口
- M的接口
- 包含视图和相应ViewModels的几个库 – 这里也可以分割
- 几个包含模型的库
所有依赖关系都基于只通过DI解决的接口。