2010-12-20 71 views
1

我在WPF項目中使用WCF服務引用,而我的實體框架數據模型駐留在WCF項目中。WPF,WCF,Entity,MVVM的疑惑!

而我正在使用MVVM Light框架。我正在做以下事情:

  1. 我在服務中使用LINQ來獲取數據,然後通常從WPF,obersvablecollections中獲取它。
  2. 一切工作在視圖部分像填充數據網格,視圖根據需要。

但我有如下疑點:

  1. 是轉移WCF和WPF之間的數據的這種正確的方法。
  2. 我還沒有使用過任何模型,我對使用它有何疑問?
  3. 我也想從datagrid保存數據。我能夠將datagrid的更新數據的observable集合傳遞給服務的函數。但是,我如何從這個集合更新實體?通過循環?聽起來不對。一旦我從這個集合更新實體,我將能夠使用saveChanges更新到數據庫中。
  4. 當我需要在樹視圖中顯示分層數據時,從存儲過程xml中創建數據hierarichal的位置?使用視圖來創建分組標準列?在服務中創建此列?在演示文稿中創建此列/屬性?

回答

1

1 - 沒有正確的方法,它取決於您的要求和目標。

2 - 對於MVVM,模型應該位於WPF和數據庫之間。這意味着所有對數據庫的調用都應該通過模型,並且所有對數據庫的寫入操作也應該通過模型。 WPF GUI應該只綁定到模型。這通常意味着您的WPF部分主要由XAML代碼組成。所有訪問數據庫的代碼都應該在模型中。

有很好的理由來區分這一點。

  • 你可以在模型上編寫單元測試。
  • 視圖模型獨立於GUI的外觀。這意味着您可以通過放入不同的組件並僅綁定到模型來輕鬆更改GUI。
  • 快速谷歌搜索可能會產生更多的原因。

3 - 我會嘗試僅發送已更改的實體。這可以通過將集合傳遞給您的視圖模型來完成,並讓您的視圖模型找出發生了什麼變化。

4 - 我不太明白你想要做什麼。通常,要製作TreeView,應該爲每個視圖模型創建HierarchicalDataTemplate。 TreeView控件將負責其餘的部分。你真的應該在這個教程上做一些教程,因爲這很難讓你頭腦清醒。

+0

所有的服務引用方法調用應該在模型中?而不是在視圖模型中?但我已經看到很少的示例項目,人們會從視圖模型本身進行服務調用。這是一個不好的做法? – WhoIsNinja 2010-12-21 16:41:21

+0

我會從視圖模型進行服務調用。基本上,視圖是你的WPF Xaml +代碼隱藏,視圖模型是你的邏輯,模型是數據對象本身。看看這個網站,它顯示了MVC,MVP,MVVM之間的區別(帶圖表):http://www.wpftutorial.net/MVVM.html – Mas 2010-12-22 11:37:04