2009-09-14 3 views
15

W przypadku dodawania modułów do kolekcji IRegionManger w Composite WPF (Prism), jaka jest różnica między używaniem IRegion.Add i IRegionManager.RegisterViewWithRegion?W Composite WPF (Prism), jaka jest różnica między IRegion.Add i IRegionManager.RegisterViewWithRegion?

IRegion.Add

public void Initialize() 
{ 
    _regionManager.Regions["MainRegion"].Add(new ModuleAView()); 
} 

IRegionManager.RegisterViewWithRegion

public void Initialize() 
{ 
    _regionManager.RegisterViewWithRegion("MainRegion", typeof(ModuleAView)); 
} 

Odpowiedz

15

Różnica polega na tym, kto jest odpowiedzialny e do tworzenia widoku. W scenariuszu IRegion.Add (nazywanym także View Injection) odpowiadasz za wcześniejsze utworzenie widoku. W innym scenariuszu z RegisterViewWithRegion (zwanym także View Discovery) menedżer regionu tworzy sam widok.

Istnieją pewne techniczne powody, dla których warto wykonać jedną lub drugą. Na przykład

  • trzeba było bardziej skomplikowany sposób tworzenia widoków (może chcesz utworzyć widok i jej ViewModel i ożenić się je poprzez ustawienie właściwości DataContext siebie), to trzeba użyć widoku wtrysk
  • jeśli wykorzystasz Scope Regionów, będziesz zmuszony do użycia View Injection.

Odpowiedni Documenation jest: Dla View Skład (w tym View wtrysk vs. View Discovery i dyskusji widzenia pierwszego lub View-Presenter pierwszego pojęć): http://msdn.microsoft.com/en-us/library/dd458944.aspx

Jest też bardzo przydatny " kiedy używać każdej "sekcji. Poniżej znajduje się wyciąg z docs:

  • Explicit lub programowe sterowanie, gdy widok jest tworzony i wyświetlane, lub gdy trzeba usunąć widok z regionu, na przykład w wyniku Aplikacja logiczna .
  • Aby wyświetlić wiele instancji tych samych widoków w regionie, gdzie każde wystąpienie widoku jest powiązane z różnymi danymi.
  • Aby kontrolować, która instancja regionu został dodany do widoku (na przykład , jeśli chcesz dodać szczegółowy widok klienta do określonego regionu szczegółów klienta ). Zauważ, że ten scenariusz wymaga obszarów o zasięgu zdefiniowanym w dalszej części tego tematu: .

Mam nadzieję, że to pomoże.

+0

@ Anderson - twoja odpowiedź naprawdę pomaga. Rozumiem, że IRegion.Add i IRegionManager.RegisterViewWithRegion tworzą konkretną instancję widoku i natychmiast dodają ją do IRegionCollection. Wprawdzie po prostu mam przyczółek na CAG. Czy możesz wskazać mi przykład z większą ilością szczegółów? Przeszedłem przez QuickStarts i HowTos, ale nie do końca rozumiem, kiedy do jednego lub drugiego, ponieważ próbki używają ich w metodzie Imodule.Initialize i nie wydają się robić nic innego w przykładach. –

+0

Nie, różnica jest z Add, przechodzisz w już utworzony widok. W RegisterViewWithRegion przekazujesz albo Typ, Delegata, albo Obiekt (instancjonowany widok). W większości przypadków to ostatnie przeciążenie nie jest używane. Daj mi chwilę, a pokażę ci właściwe miejsce w Dokumentach. –

+0

Zaktualizowany linkiem do najlepszego zasobu w dokumentacji i wyciągnąłem oficjalne informacje na temat tego, kiedy należy użyć wtrysku widoku a wyświetlić odkrycie. Mam nadzieję, że jest jaśniejszy niż mój opis. –

2

RegisterViewWithRegion podnosi OnContentRegistered imprezę, ale oczywiście to nie może być przypadek zależności od DI

+0

Czy możesz rozwinąć? To nie jest jasne. –

+0

, gdy bezpośrednio zmienisz właściwość za pomocą operatora nawiasów, nie podniesiesz zdarzenia, ale gdy zadzwonisz na inną metodę, otrzymasz zarówno zmodyfikowaną kolekcję, jak i zdarzenie, które może powiadomić każdego, kto go słucha: – slf

Powiązane problemy