我有一个用于添加或编辑客户的视图和相应的视图模型。
如果我单击Add new customer按钮,unity会为我提供一个漂亮的新CustomerView,并传入我的datacontext和视图模型,以及作为构造函数参数的客户对象。
我保存了我的客户,现在想要从我的数据网格中查看另一个现有的客户记录。
我有一个接受来自datagrid的selectedItem(Customer)的命令,现在我想在View模型的构造函数中将它作为参数传递给我的CustomerView。
如何告诉Unity我现在想用Client参数构建我的Views视图模型然后导航到视图?
修改的 我在CustomerModule中注册我的视图,并将Customers启动按钮添加到导航区域,如下所示:
public void Initialize()
{
_container.RegisterType<ICustomerMainView, CustomerMainView>();
_container.RegisterType<ICustomerMainViewViewModel, CustomerMainViewViewModel>();
_container.RegisterType<ICustomerView, CustomerView>();
_container.RegisterType<ICustomerViewViewModel, CustomerViewViewModel>();
_container.RegisterType<ICustomerNavIconView, CustomerNavIconView>();
_container.RegisterType<ICustomerNavIconViewModel, CustomerNavIconViewModel>();
//var view = _container.Resolve<ICustomerMainView>();
//var view1 = _container.Resolve<ICustomerView>();
_regionManager.RegisterViewWithRegion("NavigationRegion", typeof(Views.CustomerNavIconView));
}
要添加新客户,我有一个以下命令:
private void OnAddNewCustomer()
{
try
{
_regionManager.RegisterViewWithRegion("MainRegion", typeof(Views.CustomerView));
_regionManager.RequestNavigate("MainRegion", "CustomerView");
}
catch (Exception ex)
{
}
}
这很好,我可以添加新客户并保存详细信息。现在,如果我想通过双击网格中的记录来查看我保存的客户,我有一个如下命令但不知道如何设置CustomerViewViewModel&#34;客户&#34;参数是我的selectedItem(客户)????
private void OnViewCustomer(Customer customer)
{
try
{
_unityContainer.Resolve<ICustomerViewViewModel>(new ParameterOverride("customer", customer));
_regionManager.RequestNavigate("MainRegion", "CustomerView");
}
catch (Exception ex)
{
}
}
感谢。
答案 0 :(得分:0)
我不认为Prism支持将对象/类传递给导航请求。但是,您可以将string / id传递给接收方法。这是你如何做到的:
var query = new UriQuery();
query.Add("Customer", Customer.Id);
_regionManager.RequestNavigate("MainRegion",
new Uri("CustomerView" + query.ToString(), UriKind.Relative));
现在,您可以使用此ID并从数据库或任何地方获取对象。
答案 1 :(得分:0)
所以我做的是以下内容:
var clientView = _unityContainer.Resolve<IClientView>(new ParameterOverride("clientId", client.ClientId).OnType<ClientViewViewModel>());
_regionManager.Regions["MainRegion"].Add(clientView);
_regionManager.RequestNavigate("MainRegion", "ClientView");
本质:
答案 2 :(得分:0)