I am creating a module for an application based on MVVM, CAL and PRISM. I am new to these concepts and trying to figure out all the patterns, and now I'm struggling with the following problem:
I need to create multiple instances of the same view. Each view needs to bind its own ViewModel, containing data for this particular view. In a bit more detail, this is my scenario:
I need to display multiple instances of OrdersDetailsView.xaml in an area placed in OrdersView.xaml. I have an XAML OrdersView that contains an ItemsControl tag defined as follows:
<ItemsControl x:Name="OrdersItemsControl" BorderThickness="0"
cal:RegionManager.RegionName="OrdersRegion" Margin="0,10,0,10">
As you can understand - inside the ItemsControl in my OrdersView, I want to display several instances of OrderDetailsView. I can add one OrderDetailsView in the hard-coded form described below, but what is the correct / preferred way to create and load multiple views and data into a region?
Dim OrdersRegion = _RegionManager.Regions("OrdersRegion")
Dim view = _Container.Resolve(Of OrdersDetailsView)()
Dim viewmodel = _Container.Resolve(Of OrdersDetailsViewModel)()
view.ApplyModel(viewmodel)
OrdersRegion.Add(view, "OrdersDetailsView")
OrdersRegion.Activate(view)
EDIT:
Why this code gives me 2 OrdersDetailsView BOTH with ZZZ orders, I would hope that I have one view with Orders XXX and one with Orders ZZZ:
Dim OrdersRegion = _RegionManager.Regions("OrdersRegion")
Dim viewX = _Container.Resolve(Of OrdersDetailsView)()
Dim viewmodelX = _Container.Resolve(Of OrdersDetailsViewModel)()
viewmodelX.OrdersName = "Orders XXX"
viewX.ApplyModel(viewmodelX)
Dim viewZ = _Container.Resolve(Of OrdersDetailsView)()
Dim viewmodelZ = _Container.Resolve(Of OrdersDetailsViewModel)()
viewmodelZ.OrdersName = "Orders ZZZ"
viewZ.ApplyModel(viewmodelZ)
OrdersRegion.Add(viewX, "OrdersDetailsViewX")
OrdersRegion.Add(viewZ, "OrdersDetailsViewZ")
EDIT2:
Public Sub Initialize() Implements Microsoft.Practices.Composite.Modularity.IModule.Initialize
RegisterServices()
container.Resolve(Of IOrdersView)()
container.Resolve(Of IOrdersViewModel)()
container.Resolve(Of IOrdersDetailsView)()
container.Resolve(Of IOrdersDetailsViewModel)()
End Sub
Private Sub RegisterServices()
container.RegisterType(Of IOrdersViewModel, OrdersViewModel)(New ContainerControlledLifetimeManager())
container.RegisterType(Of IOrdersView, OrdersView)()
container.RegisterType(Of IOrdersDetailsViewModel, OrdersDetailsViewModel)(New ContainerControlledLifetimeManager())
container.RegisterType(Of IOrdersDetailsView, OrdersDetailsView)()
End Sub