Transcript MVVM
Realizacja aplikacji internetowych
MVVM, Prism i inni
MVC, MVP
MVVM
Anemiczny model ?
MVVM
Model services
MVVM czytanki
http://www.codeproject.com/Articles/10017 5/Model-View-ViewModel-MVVM Explained
Tradycyjna aplikacja
Widok 1 Widok 1 Widok 2 Widok 2 Widok 2 Widok 2 Widok 2 Widok 2 Widok 2 Widok 2
MVVM
Model Widoku Model(e) i serwisy Model Widoku Model Widoku Model Widoku
Prism
2.X
4.0 – WPF 4.0, SL4.0
4.1 – WPF 4.0, SL5.0
4.5 – WPF 4.5, SL5.0
Podstawowe pojęcia: Shell Bootstapper Moduł Region Widok
Prism – bootstrapper
Inicjalizacja : Aplikacji Serwisów infrastukturalnych (core services) Serwisów aplikacji
Prism – bootstrapper
UnityBootstrapper
/
MefBootstrapper
Core services: IModuleManager, IModuleCatalog, IModuleInitializer, IRegionManager, IEventAggregator, ILoggerFacade, IServiceLocator
Prism – shell
Główne okno/strona Anlogia do masterpage Obejmuje regiony Tworzony w Bootstrapperze (wstrzykiwany z Unity/MEF)
Prism – Region
“placeholder” dla dynamicznego kontentu Adaptery:
Prism – Wstrzykiwanie widoków
Kod pobiera (np. z RegionManagera) referencję do regionu, tworzy i wstrzykuje widok IRegion region = regionManager.Regions["MainRegion"]; var ordersView = container.Resolve
Prism – Odkrywanie widoków
Definiujemy w RegionViewRegistry relacje Region vs. Typ Widkoku i podczas tworzenia regionu automatycznie tworzony jest odpowiedni widok this.regionManager.RegisterViewWithRegion("MainRegion “, () => this.container.Resolve
Prism – Region adapter-y
ContentControlRegionAdapter
– dla kontrolek System.Windows.Controls.ContentControl i pochodnych
SelectorRegionAdapter
- dla pochodnych klas System.Windows.Controls.Primitives. (np. System.Windows.Controls.TabControl control).
ItemsControlRegionAdapter
– dla kobtrolek typu System.Windows.Controls.ItemsControl i pochodnych
TabControlRegionAdapter
– (tylko SL) Custom adapter np. dla stack pannel mappings.RegisterMapping(typeof(StackPannel), new StackPannelRegionAdapter());
Prism – custom adapter
} { protected override void Adapt(IRegion region, ContentControl regionTarget) region.Views.CollectionChanged += (sender, e) => { if (e.Action == NotifyCollectionChangedAction.Add) foreach(FrameworkElements element in e.NewItems) { regionTarget.Children.Add(element) ; } // handle removing of elemts };
Prism – Komunikacja
Komendy DelegateCommand – zwykle lokalna, używa delegatów, nie wymaga handlerów DelegateCommand – bez paramerów DelegateCommand
Prism – Komendy
DelegateCommand – zwykle lokalna, używa delegatów, nie wymaga handlerów DelegateCommand – bez paramerów DelegateCommand
Prism – EventAggregator
EA – subskrypcja
eventAggregator.GetEvent
PublisherThread
BackgroundThread
UIThread
.
eventAggregator.GetEvent
be(ShowNews, ThreadOption.UIThread); Filtrowanie: fundAddedEvent.Subscribe(FundAddedEventHandler, ThreadOption.UIThread, false, fundOrder => fundOrder.CustomerId == _customerId);
EA – publikacja, rezygnacja z s.
Publikacja: EventAggregator.GetEvent
fundAddedEvent
= eventAggregator.GetEvent
fundAddedEvent.Unsubscribe(subscriptionToken);
Region Context
Obiekt współdzielony przez hosta i widoki w regionie Widoczny w XML i w kodzie Wymaga dependancy object To nie to samo co DataContext Definicja:
RegionManager.Regions["Region1"].Context = employeeId;
Odwołanie Lub
ObservableObject
cal:RegionManager.RegionContext="{Binding Path=SelectedEmployee.EmployeeId}"
Prism linki
HomePage http://compositewpf.codeplex.com/ HOL - http://msdn.microsoft.com/en us/library/gg405475%28v=pandp.40%29.a
spx Dokumentacja http://msdn.microsoft.com/en us/library/gg406140.aspx
Inne MVVM
Caliburn Micro Knockout (JavaScript framework) I inne …