我正在为一个基于MVVM、CAL和PRISM的应用程序构建一个模块。我对这些概念还比较陌生,正在努力理解所有的模式,但目前我遇到了以下问题:
我需要创建多个相同视图的实例。每个视图都需要绑定到自己的ViewModel,其中包含该特定视图的数据。更详细地说,这是我的情况:
我需要在OrdersView.xaml中的一个区域中显示多个OrdersDetailsView.xaml的实例。我有一个OrdersView XAML,其中包含一个ItemsControl标记,定义如下:
我需要创建多个相同视图的实例。每个视图都需要绑定到自己的ViewModel,其中包含该特定视图的数据。更详细地说,这是我的情况:
我需要在OrdersView.xaml中的一个区域中显示多个OrdersDetailsView.xaml的实例。我有一个OrdersView XAML,其中包含一个ItemsControl标记,定义如下:
<ItemsControl x:Name="OrdersItemsControl" BorderThickness="0"
cal:RegionManager.RegionName="OrdersRegion" Margin="0,10,0,10">
您可以理解的是,在我的OrdersView中的ItemsControl中,我希望显示多个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)
编辑:
为什么这段代码给了我两个OrdersDetailsView,都是关于订单ZZZ的?我希望得到一个关于订单XXX的视图和一个关于订单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")
编辑2:
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