2010-04-12 8 views
8

Zauważam, że wiele frameworków WPV MVVM wydaje się unikać używania elementów nawigacyjnych NavigationWindow i Page, na rzecz układania stron za pomocą zagnieżdżonych kontrolek UserControl.Kiedy należy używać funkcji UserControl zamiast strony?

NawigacjaWindow i Strona umożliwiają łatwe włączanie nawigacji wstecz i do przodu w dzienniku, a także zapewniają łatwy sposób przesyłania danych między stronami. Większość frameworków MVVM zauważyłem, że te funkcje zostały ponownie wdrożone na różne sposoby.

Czy istnieje szczególny powód, aby unikać korzystania z NavigationWindow i strony?

Odpowiedz

10

„NavigationWindow nie przechowywać wystąpienie zawartości obiektu w historii nawigacji. Zamiast NavigationWindow tworzy nową wystąpienie obiektu zawartości każdego czas jest nawigacja, aby za pomocą historii nawigacji. Ten zachowanie jest zaprojektowany, aby uniknąć nadmiernego zużycia pamięć podczas dużych ilościach i duże kawałki treści są poruszać się. w konsekwencji, państwo treści nie jest pamiętany z jeden nawigacji do następnego. Jak kiedykolwiek, WPF zapewnia kilka technik przez którym można przechowywać kawałek stanie o kawałek zawartości nawigacji historii ....”

http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationwindow.aspx

+2

Dobry połów.Być może więc klasy NavigationWindow i Page są nieco mniej istotne dla typowej aplikacji biznesowej. Chociaż wciąż zaskakuje mnie to, że tak wiele frameworków MVVM całkowicie ich unika. – dthrasher

1

Cóż, nadal będziesz używać kontrolek użytkownika do tworzenia podzespołów wielokrotnego użytku, ale jeśli chodzi o architekturę aplikacji, to naprawdę warto używać przypadku. Jeśli tworzysz typową aplikację internetową, aplikacja Business/Navigation powinna być w porządku. Jeśli piszesz grę, nie tak bardzo. Podobnie, jeśli robisz coś w rodzaju interaktywnej reklamy lub odtwarzacza multimedialnego.

2

Właśnie znalazłem jakieś inne ciekawe informacje związane z WPF NavigationWindow i Page na stronie Paula Stovella.

On ma do powiedzenia o klasie NavigationWindow:

WPF obejmuje klasę o nazwie NavigationWindow, która jest zasadniczo okno, które również może służyć jako ramka, poprzez wdrożenie w większości te same interfejsy. Z początku wydaje się to przydatne, ale przez większość czasu potrzebujesz większej kontroli nad Oknem, więc nigdy nie miałem potrzeby używać tej klasy. Wskazuję to tylko ze względu na kompletność, choć twój przebieg może się różnić.

zobaczyć jego w-głębokości artykuł na WPF Navigation i Magellan and WPF Page management issues on napotkane podczas pisania jego ramy Magellan WPF.

3

Właśnie odkryłem inną różnicę między UserControls a Pages: Strony nie mogą być używane jako DataTemplates.

Na przykład, jeśli były tworzenia aplikacji przy użyciu MVVM styl, możesz spodziewać się to do pracy:

<DataTemplate DataType="{x:Type ViewModels:ProjectDashboardViewModel}"> 
     <Views:ProjectDashboardView /> 
    </DataTemplate> 

Ale jeśli ProjectDashboardView to strona, zakończy się niepowodzeniem.

+0

W tym scenariuszu chcesz, aby twoja strona akceptowała model widoku w konstruktorze lub tworzyła go z innych danych. Ogólnie rzecz biorąc, wdrożenia MVVM będą wymagały użycia funkcji PageFunction . Wewnątrz strony może znajdować się prezenter zawartości zawierający model widoku. Strona jest komponentem najwyższego poziomu. Spróbuj myśleć o tym jako o oknie wbudowanym. – Gusdor