WPF - inotifypropertychanged vagy dependencyproperty a viewmodel - adatok kötelező - építészet, kód

Végrehajtása során ViewModel WPF építészet Model-View-ViewModel, úgy tűnik, van két fő lehetőség, hogyan kell tenni kötődni képes adatokat. Láttam megvalósítások használó DependencyProperty tulajdonságok, amelyekkel a nézet van kötve, és láttam, hogy a ViewModel végrehajtási INotifyPropertyChanged.

A kérdésem az, mikor kell előnyben részesítik a másik? Van-e különbség a teljesítmény? Ez tényleg jó ötlet, hogy a ViewModel szerint WPF? Mi van még szükségem, hogy fontolja meg, amikor így tervezési döntéseket?

  1. DependencyObjects nem jelölt serializable
  2. DependencyObject osztály felülbírálja és tömörítés módszerek egyenlő () és GetHashCode ()
  3. A DependencyObject van menet affinitás - hozzáférés csak akkor lehetséges, egy patak, amelyben létrehozták

A használati utasítás szerint a WPF hatékonyság DependencyObjects határozottan jobban működnek, mint Pocos, hogy végre INotifyPropertyChanged:

A választás teljesen az Ön üzleti logika és a felhasználói felület szintjén absztrakciók. Ha nem szeretne egy jó elválasztást akkor DP működni fog az Ön számára.

DependencyProperties vonatkozik elsősorban a VisualElements szinten, így nem lenne jó ötlet, ha alkotunk sok DP egyes üzleti követelményeknek. Szintén DP nagyobb költségű INotifyPropertyChanged. Ha a fejlődő WPF / Silverlight, próbálja teljes mértékben testre a felület és ViewModel úgy, hogy bármikor meg tudjuk változtatni az elrendezés és a felhasználói felület elemeit (a témák és stílusok)

Ami kifejező élveztem a függőség tulajdonságait és szervilizmus a gondolat INotifyPropertyChanged. Amellett, hogy a húr tulajdonságneveket és esetleges memóriavesztés miatt esemény előfizetések INotifyPropertyChanged sokkal egyértelműbb mechanizmus.

Függőség ingatlan jelenti „amikor ezt csinálni, hogy” segítségével könnyen érthető statikus metaadatokat. Ez deklaratív megközelítés, hogy megkapja az én szavazatom elegancia.

INotifyPropertyChanged ha használják is lehetőséget ad, hogy adjunk több logika a kódját get és tuner a tulajdonságait.

Az Ön getter és setter --- minden, amit tehetünk, egyszerűen hívja setValue és getValue illetve b / c más részein a keret, amely nem hívta getter / setter, ahelyett, hogy közvetlenül hívja setValue, getValue, így a logika tulajdonságai nem megbízhatóan teljesítették.

A INotifyPropertyChanged funkciók határozzák meg az eseményt:

És akkor csak használ semmilyen logikát a kódban, akkor hívja:

Ez lehet a getter / setter vagy máshol.

Függőségi tulajdonságok úgy vannak kialakítva, hogy támogassa a kötési (célként), hogy az elemek a felhasználói felület, nem pedig mint a forrás adatok kötő, ez a INotifyProperty. Az egyértelmű szempontból, akkor ne használja a DP ViewModels.

„Ahhoz, hogy egy kötelező forrás, az ingatlan nem kell egy függőségi tulajdonság, akkor bármilyen CLR tulajdon kötelező forrás. Annak érdekében azonban, hogy a téma a kötődés, az ingatlan kell függenie. Ahhoz, hogy egy egyoldalú vagy kétoldalas kötési, hogy hatékony legyen, Forrástulajdon támogatnia kell változást bejelentést, amely kiterjed a kötelező rendszert, és, következésképpen, a cél. Rendelésre CLR kötelező forrás, ez azt jelenti, hogy az ingatlan támogatnia kell INotifyPropertyChanged. Gyűjtemények támogatnia kell INotifyCollectionChanged. "

Minden függő objektumok nem sorosítható (ez zavarhatja a használat ViewModels és DTO (POCO).

Vannak különbségek a DP Silverlight képest WPF.

Azt is meg kellett, hogy ezt a döntést a közelmúltban.

Azt találtuk, hogy a INotifyPropertyChanged mechanizmus alkalmas a saját igényeinek jobb, mert lehetővé tette, hogy a ragasztó én GUI meglévő struktúra az üzleti logika megkettőzése nélkül állapotban. A szerkezet, amit használnak volt saját megfigyelő mintát, és nem volt nehéz mozgatni egyik szintről a másikra észre. Csak volt egy osztály, amely végre a megfigyelő felület az én üzleti logika és INotifyPropertyChanged felület.

A DP nem lehet meghatározni a háttér, amely tárolja az állam a saját. Szerettem volna .net átmeneti másolatát minden állam az elem, amelyre voltam kötve. Úgy tűnt, felesleges overhead - én állam nagy és bonyolult.

Tehát itt találtam INotifyPropertyChanged jobb tulajdonságainak megjelenítése az üzleti logika a GUI.

Apropó, ha szükség van egy egyedi GUI widget, hogy ki a tulajdon és a változások az ingatlan befolyásolja a többi GUI widget, a DP bizonyult az egyszerű megoldás.

Ezért ott találtam DP hasznos GUI GUI értesítést.

Ez tényleg jó ötlet, hogy a ViewModel szerint WPF?

NET 4.0 lesz System.Xaml.dll, így nem kell attól függ, bármilyen szerkezet használni. Cm. Hozzászólás Rob Ralegh az ő PDC ülésén.

XAML - egy nyelv leírására tárgyak, és a WPF - egy szerkezet leírt tárgyak felhasználói interfész elemeket.

A kapcsolatuk hasonló C #, a nyelv leírására a logika és a .NET, a struktúra, amely megvalósítja bizonyos logika.

A cél a XAML - ez kijelentő tárgy grafikonok. W * F technológiák nagy jelöltek erre a paradigma, de XAML függetlenül létezik számukra.

XAML és az egész rendszer függőségeket hajtottak végre külön stack WF és a WPF, lehetséges, hogy a tapasztalat a különböző csapatok létrehozása nélkül függőséget (no pun intended) között.

Úgy tűnik, hogy a függőség Properties kell használni a kontroll, hogy hozzon létre, mint a gombok. Ahhoz, hogy használni tulajdonságok XAML, valamint az összes WPF funkciókat, azokat a tulajdonságokat kell egy függőségi tulajdonság.

Azonban az ViewModel jobb használni INotifyPropertyChanged. Segítségével INotifyPropertyChanged megadja a lehetőséget, hogy a logika getter / setter, ha kell.

Azt javaslom megnézni Josh Smith változata az alap osztály egy ViewModel, amely már végrehajtja INotifyPropertyChanged:

Azt hiszem, ez egy jó példa arra, hogyan kell csinálni ViewModel.

Azt hiszem, egy DependencyProperty és INotifyPropertyChanged használt két különböző dolog a Binding: az első, hogy a tulajdonságait egyaránt egy horgony és futnak be az egyéb tulajdonság (állíthatja be a tulajdonság), az utóbbi, ha azt szeretné, hogy az ingatlan értéke használták kötelező forrás (név a Binding Path kifejezés) kifejezések. Így a választás egy technikai jellegű.

Függőség tulajdonságok - a ragasztó, hogy hozzon létre egy egyéni ellenőrzés. Ha érdekli az Intelli-ész, hogy megmutassa a tulajdonságait a Properties ablakban XAML fejlesztés akkor használja a függőség tulajdonságait. INPC soha nem fognak megjelenni a tulajdonság a Properties ablakban a tervezési idő.

Ha azt szeretnénk, hogy ki tulajdonságai egyéb ellenőrzések, akkor használja a függőség tulajdonságait. De sok szerencsét, mert időbe telik, hogy megértsék.

Csak egy dolog, hogy miért kell választani DependencyObject - Kötelező jobban fog működni. Csak próbáld egy példát ListBox és TextBox. töltse ki az adatokat listáját tulajdonságainak INotifyPropertyChanged és DependencyProperty és szerkesztheti az aktuális elem a mezőbe.