拆分View视图模型和模型在不同的项目中 - 我在哪里放置ViewModelLocator

时间:2016-09-03 16:57:07

标签: c# wpf visual-studio mvvm mvvm-light

将我的视图/ viewmode / model拆分为单独的visual studio项目。 我正在使用MVVMLight工具包版本5.3.0,Visual Studio 2015,仅用于桌面的C#和WPF应用程序

解决方案结构

  • 项目1:UI(WPF应用程序)
  • 项目2:查看(WPF用户控件库 - 存储所有视图)
  • 项目3:ViewModel(类库 - 存储所有ViewModel)
  • 项目4:模型(类库 - 存储所有模型)
  • 项目5:通用(类库 - 使用我的模型和ViewModel - 仅存储我的类和接口)

引用

  • Common:由Model和ViewModel项目引用
  • 模型:由ViewModel项目引用
  • ViewModel:由View项目引用
  • 查看:我认为我的UI应该只引用我的View项目

所以关注MVVM,我的View只知道ViewModel,而我的ViewModel知道我的模型。

所以现在我的问题:

1)我在哪个项目中放置了ViewModelLocator? (现在我将它放在我的View项目中) 2)我的UI项目是否应仅引用我的View项目? 3)在MVVM灯项目中,“DataContext =”{Binding Main,Source = {StaticResource Locator}}“位于View xaml文件中,定位器在app.xaml中定义。如何使用View将我的View绑定到ViewModel ViewModelLocator?

我查了几篇帖子,无法找出这些答案

更新

这是我为了让它发挥作用而做的:

第1步:更改了引用:

  • UI引用View和ViewModel项目
  • 查看引用ViewModel项目
  • ViewModel引用模型和公共
  • 模型参考通用

第2步:将ViewModelLocator移动到ViewModel项目(从View中)

步骤3:在我的View(usercontrol)中添加了datacontext作为DataContext =“{Binding UserDetailsVM,Source = {StaticResource Locator}}”

第4步:将我的App.xaml添加到UI项目

第5步:在我的UI项目的MainWindow中,我在xaml中添加了我的视图

注意: - UI项目没有对MVVMLight的引用 - View和ViewModel项目都引用了MVVLightLibs和CommonServicesLocator

它有效,但这是正确的做法吗?

1 个答案:

答案 0 :(得分:0)

老实说,我要做的是将其重组为两个项目:Class Library项目和WPF项目。因此,您当前的项目1和2将在一个项目中,而3,4和5在另一个项目中。

至于回答你的问题,I too encountered an issue with ViewModelLocator。我断定WPF应用程序不喜欢“分享”。所以,我把ViewModelLocator放在了WPF项目中。

如果您仍然想要进行所有分离,我建议在两个提议的项目中使用不同的文件夹和命名空间。

命名空间示例:

  • 适用于您的ViewModelLocator,数据服务,存储服务,接口等: YourAppName.Services
  • 适用于您的型号:YourAppName.Models
  • 对于您的ViewModel:YourAppName.ViewModels
  • 对于您的观点:YourAppName.Views