2012-01-23 29 views
2

我一直在嘗試一會兒,一次繞過2個概念,學習MVVM(其中一個難題一直試圖找出使用哪個框架,我們甚至不知道有多少個直到幾個星期前),並且我正在嘗試學習Entity Framework 4.2。EF如何在WPF/Silverlight應用程序中工作?

這是一個我們要寫的WPF應用程序。

我已經得到了Julia Lerman的書,我也正在通過一個關於EF的在線培訓課程,但有一件事我仍然沒有得到,而且還沒有看到任何例子,那就是如何處理比如INotifyPropertyChanged接口和通過EF創建的類,不管我們是否使用MVVM,使用INotifyPropertyChanged都是至關重要的。

所以,讓我在這裏問素問:

你允許EF創造一切反映所有數據在數據庫中的數據訪問類的,然後複製多的代碼,所以我可以讓它與INotifyPropertyChanged一起工作?或者還有其他的方式嗎?

回答

0

由於ViewModel是根據View的需求而創建的,因此只有在非常簡單的情況下,ViewModelEntity纔是同一類。通常你有一個Entity類和一個ViewModel類。
INotifyPropertyChanged只是其中的原因之一。還有其他像轉換,驗證,有意義的錯誤信息,聚合等。

0

我以前在我的幾個WPF應用程序中使用過實體框架。我第一次使用EF數據庫。按照我想要的方式獲得模型非常棘手,一旦它運行起來,那麼我必須在我的實體類上實現INotifyPropertyChanged。

最近,我已經開始使用EntityFramework CodeFirst 4.1,我發現處理所有屬性更改的東西要容易得多。我通常創建一個INotifyPropertyChanged實現的基類,並從中繼承我的實體。

就ViewModel而言,我也開始擔心這個框架或框架。後來我決定推出自己的產品。當然,框架有一些有趣的功能,但爲了學習,我發現通過創建自己的ViewModelBase類並從中繼承我的所有ViewModel更容易進入它。

ViewModelBase通常實現INotifyPropertyChanged。後來我創建了一個ViewModel監視器類,它將有一個ViewModel集合。爲了查看它們,我給ViewModelBase一個FriendlyName屬性,以便每種類型的繼承ViewModel都可以爲它設置一個名稱(我的類型通常是RecordMaintenanceViewModel,NavigationViewModel,ShellViewModel等),我通常會繼承我使用的視圖特定的ViewModel那些。因此,在我的發貨計劃中的ShipmentView中,ShipmentViewModel從繼承自ViewModelBase的CollectionViewModel繼承。通過這種方式,我將功能劃分爲不同的部分,以便我可以處理特定的場景。

我通常將我的ViewModel基礎移植到每個項目上,並經常使用我的中間ViewModels;有時我必須重新創建它們。

1

當想到我時,我很困惑,我不得不將每個數據對象映射到一個只在其上實現INPC的新對象。

然後我發現了一個技巧:假設你要使用WCF,它會自動實現INPC。
對於集合,只需進入Service Reference配置,並進行設置,以便它將ObservableCollection作爲默認集合類型。

就是這樣,你設置爲MVVM =)

+0

什麼? WCF實現INotifyPropertyChanged接口?你在跟我開玩笑嗎?我不知道。這是否取決於你要返回的數據類型?例如,我幾年前(2008年或更早的時候,我認爲)編寫了所有的WCF服務,當時我當然不知道INPC。我所有的WCF類都返回強類型數據集。我假設那些不實施INPC,我對此是否正確? – Rod

+0

去你的客戶端檢查你的類型。當你在他們每個人身上看到「PropertyChanged」事件時,擴大你的視線。 = p –

相關問題