MVVM光強的基本用法
- Intialize的DispatcherHelper在App.cs文件的Application_Startup功能
- 從BaseClass的創建的ViewModels
- 始終創建一個ViewModelLocator類,它包含所有視圖模型並鏈接到您的應用程序資源
- 使用RelayCommands將函數公開給您的視圖
- 瞭解何時使用DispatchHelper。
清理思路:
- 在適當的時候,添加到您的視圖模型以清除清理您的DomainContext的EntitySet的()?
- 調用ViewModelLocator的CleanupSVM()函數清除視圖模型,當它們在應用程序中不再需要時。
我很想聽聽其他人關於何時/如何使用CleanUp功能。隨着應用程序的增長,我確實需要添加一些清理功能來更好地管理客戶端內存使用情況。
對於混合能力:
- 摘要服務/查詢實現到一個接口。
- 創建2個班每個服務實現類(1設計,1用於生產)
- 在你的每個視圖模型,實現自己的服務類(使用IsInDesignMode)來創建可摻混服務的實現是必要的。
- 使用靜態變量將您的DomainContext保存在Service Implmentation類中。
- 在ViewModels的構造函數中添加DispatcherHelper.Initialize(),但僅在設計模式下使用。 Blend在加載頁面時不會加載應用程序,這可以解決這個問題。
爲了增加業務邏輯:
- 示範添加業務邏輯,第一,然後在視圖模型。
- 使用模型的部分方法爲適當的更改/更新事件添加邏輯。
- 添加只讀屬性(只有getter)以在模型上提供摘要值和計算值。
對於查看:
- 根始終綁定到定位對象。
- 儘量保持代碼隱藏的邏輯佈局或僅自定義UI邏輯。避免引用您的ViewModel。
對於類別:
- 使用CollectionViewSource在你的ViewModels收集,與DomainContext的EntitySet的
- 源應用所有篩選,排序和分組邏輯到CollectionViewSource在你的視圖模型。
- 後ServiceCalls,呼叫.View.Refresh()在您的CollectionViewSource對象爲需要更新UI。
對於視圖模型協調(控制器邏輯)
- 使用盡量少的消息,太多的複雜性可能難以管理。
- 使用NotificationMessage和PropertyChangedMessage類發送/接收帶。
對於RIA DomainServices:
- 實現在持續變化功能的任何記錄,而不是更新/插入/刪除邏輯。
- 在插入,更新,刪除等功能,如果你需要通過導航屬性從另一個上下文引用另一個實體,無論是先檢查EntityStatus,或裝入實體,防止EntityStatus衝突。
用於調試/測試:
- 檢查輸出窗口進行綁定錯誤並進行修復。綁定錯誤會以靜默方式向用戶失敗,但會降低應用程序性能和預期行爲。
- 在Silverlight創建單元測試,以驗證添加任何型號/業務邏輯
- 創建單元測試項目來測試服務器端邏輯和功能
對於實體框架:
- 保持1-將EntitiesContext與域服務進行1比1的匹配。試圖以另一種方式分裂會導致問題。
- 不要使用[組成]屬性,除非你完全打算花了很多時間精心打造你的插入,更新和刪除邏輯。
- 使用單獨的服務將自定義類型返回給RIA客戶端。不要在PersistChangeSet功能將它們添加到您的DomainService你的EntityFramework對象
- 執行服務器端更新/集成邏輯(例如更新等系統),而不是在插入,更新,刪除等功能。這將防止您無意中通過導航屬性拉入實體,這將導致您的分離版本不更新。
- 創建額外的上下文以在更新/集成邏輯期間查找當前值。
考慮將其轉換爲社區wiki,以便任何人都可以編輯。 – 2010-08-05 16:19:37
我不會認爲它是一個com-wiki。提問者應該爲這個好問題贏得聲譽。 – Shimmy 2011-03-24 03:19:40