2016-09-03 13 views
0

將我的view/viewmode/model拆分爲單獨的visual studio項目。 我使用MVVMLight工具包版本5.3.0,視覺工作室2015,C#和用於桌面僅拆分在不同的項目中查看viewmodel和模型 - 我在哪裏放置ViewModelLocator

溶液結構WPF應用程序


  • 項目1:UI(WPF應用程序)
  • 計劃2 :視圖(WPF用戶控件庫 - 存儲所有視圖)
  • 項目3:ViewModel(類庫 - 用於存儲所有ViewModels)
  • 項目4:模型(類庫 - 存儲所有型號)
  • 項目5:通用(類庫 - 用我的模型和視圖模型 - 商店我的 - 類和唯一接口)

引用


  • 常見:通過引用模型和ViewModel項目
  • 模型:由ViewModel項目引用
  • ViewModel:引用View項目
  • 查看:我想我的UI應該只引用我查看項目

所以下面我MVVM察看知道視圖模型只是我的ViewModel知道我的模型。

所以現在我的問題:

1)在該項目中我把ViewModelLocator? (現在我把它放在我的View項目中) 2)我的UI項目應該只引用我的View項目嗎? 3)在MVVM light項目中,「DataContext =」{Binding Main,Source = {StaticResource Locator}}「位於View xaml文件和app.xaml中定義的Locator中。使用ViewModelLocator?

我檢查了幾個職位,想不通這些答案

更新:

這是我做了什麼得到它的工作:

第1步:改變引用:

  • UI引用View和ViewModel項目
  • 查看參考ViewModel項目
  • 視圖模型的參考模型和通用
  • 模型引用通用

第2步:移動ViewModelLocator到視圖模型項目(從View)

第3步:添加回DataContext的在我看來(用戶控件)作爲的DataContext = 「{結合UserDetailsVM,源= {StaticResource的定位符}}」

步驟4:添加到我的UI的項目的App.xaml中

步驟5:在我的UI項目的主窗口,我加在XAML我認爲作爲

注: - UI項目有MVVMLight 的引用 - 視圖和視圖模型項目具有參考MVVLightLibs和CommonServicesLocator

它的工作原理,但這是正確的做法嗎?

+0

我很確定這個問題沒有明確的答案。如果分裂對你和其他開發者有意義,那就去做吧。如果你想看另一個例子,你可以做到這一點,我做了一個簡單的例子:https://github.com/famoser/techgemechtel/tree/master/mvvm-pattern/Techgemechtel.MVVMExample我在這裏解釋https: //blog.famoser.ch/mvvm-pattern-in-csharp/ –

回答

0

老實說,我會做的是將其重組爲兩個項目:Class Library項目和WPF項目。所以,你現在的項目1和2將在一個項目中,而3,4和5則在另一個項目中。

至於回答你的問題,I too encountered an issue with ViewModelLocator。我的結論是,WPF應用程序不喜歡「分享」。所以,我把ViewModelLocator放在WPF項目中。

如果你仍然想要進行所有分離,我建議在兩個建議的項目的每一個下使用不同的文件夾和名稱空間。

命名空間例子:

  • 爲了您ViewModelLocator,數據服務,存儲服務,接口等: YourAppName.Services
  • 對於你的模型:YourAppName.Models
  • 爲了您的ViewModels:YourAppName.ViewModels
  • 對於您的意見:YourAppName.Views
相關問題