2013-06-29 54 views
2

我在WPF中使用MVVM模式來創建程序。如何讓由Entity Framework生成的類實現INotifyPropertyChanged?

我在我的模型類上和平執行INPC ....直到前幾天我決定使用EntityFramework。現在我不知道如何告訴EntityFramework在生成的實體類上實現INPC,並在每次屬性更改時都引發屬性更改的事件。

this

其他問題,只是建議落實視圖模型INPC,但我真的希望模型類來實現INPC減少工作量。

我正在使用Model-first方法來生成我的模型。

+0

您可以更改模型生成的T4模板以實現INPC。這是一個相當漫長的過程,因爲有很多事情要改變(主要是生成後臺字段和Getter/Setter)。 –

+0

@SimonBelanger你可以發佈一個鏈接到演練,教程或示例,它可以告訴我如何使用T4模板做到這一點? Thx非常幫助。 –

+0

這似乎是一個很好的開始:http://pjgcreations.blogspot.ca/2012/12/enabling-mvvm-inotifiypropertychanged.html –

回答

2

最近發佈的Microsoft Prism的「Unity容器」通過它的「行爲攔截」功能直接解決了這個問題。使用該功能可以使任何類BEHAVE好像它從INotifyPropertyChanged繼承。

對這個功能最引人注目的吸引力是你的EF課程可以保持幸福感並不知道發生了什麼,並且不需要爲了工作而進行手動編碼修改。正如您所預料的那樣,您需要根據自己的需求來衡量性能。

你可以在這裏下載棱鏡。 Prism

這裏有一個步驟,你應該能夠在這裏剪切並粘貼到你的代碼中。 Interception Behaviour您可以在應用程序的啓動階段連接此演練的代碼,Unity將處理其餘的代碼...

準備好一些代碼是非常有利的,因爲如果您還沒有工作,它可能會變得毛茸茸與之前的類型注入,所以我建議演練。

+0

一個類實現了'INotifyPropertyChanged',否則它不會。如果沒有實際實現它,類沒有辦法像「實現」INotifyPropertyChanged一樣行爲,因爲其他庫專門用'is''''as來測試那個接口。但是如果我正確地閱讀它,動態創建的類真的實現了'INotifyPropertyChanged'。 – hvd

+0

當給定的類已經連線時,其他使用「is」或「as」進行接口測試的類將得到「True」響應。否則,你應該聯繫Unity團隊,讓他們知道「沒有辦法讓班級表現得像......」,因爲他們說的不是這樣。 –

+0

「沒有實際執行」。就像我說過的那樣,類似於動態創建的類似於它們實現接口的行爲,它們實現了接口。 – hvd

相關問題