Я создаю модуль для приложения, основанного на MVVM, CAL и PRISM. Я довольно новичок в этих концепциях и пытаюсь разобраться во всех шаблонах, и сейчас я борюсь со следующей проблемой:MVVM-PRISM, как отображать несколько экземпляров представления в регионе/ItemsControl
Мне нужно создать несколько экземпляров одного и того же представления. Каждому из видов необходимо привязать его собственный ViewModel, содержащий данные для этого конкретного вида. Немного более подробно, это мой сценарий:
Мне нужно отобразить несколько экземпляров OrdersDetailsView.xaml в регионе, расположенном в OrdersView.xaml. У меня есть OrdersView XAML, который содержит тег ItemsControl, определенный как это:
<ItemsControl x:Name="OrdersItemsControl" BorderThickness="0"
cal:RegionManager.RegionName="OrdersRegion" Margin="0,10,0,10">
Как вы можете понять - внутри ItemsControl в моем OrdersView я хочу, чтобы отобразить несколько экземпляров OrderDetailsView. Я могу добавить один OrderDetailsView в жестко закодированном виде, описанном ниже, но каков правильный/предпочтительный способ для запуска и загрузки нескольких видов и данных в регион?
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:
Почему этот код дает мне 2 OrdersDetailsView ОБА с Orders ZZZ, я хотел бы надеяться, что я получил один вид с Orders XXX и один с 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
Дамиан, Тинкс, я медленно туда добираюсь! Пожалуйста, взгляните на мой EDIT в главном сообщении выше и посмотрите, сможете ли вы мне помочь! – Mcad001
Как регистрируются виды и виртуальные машины. Используйте метод GetHashCode для проверки того, что они не являются одним и тем же экземпляром. –
Пожалуйста, см. EDIT2 выше для того, как регистрируются просмотры и виртуальные машины. Кажется правильным для меня. – Mcad001