0

我有一个用于添加或编辑客户的视图和相应的视图模型。

如果我单击“添加新客户”按钮,unity 会为我连接一个漂亮的新客户视图,并传入我的数据上下文和视图模型,以及作为构造函数参数的客户对象。

我保存了我的客户,现在想从我的数据网格中查看另一个现有的客户记录。

我有一个从数据网格接受 selectedItem(客户)的命令,现在我想在视图模型的构造函数中将它作为参数传递给我的 CustomerView。

我如何告诉 Unity 我现在想使用我的 Client 参数构建我的 Views 视图模型,然后导航到该视图?

编辑 我在 CustomerModule 中注册我的视图并将客户启动按钮添加到导航区域,如下所示:

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“客户”参数设置为我的 selectedItem(Customer)????

private void OnViewCustomer(Customer customer)
{
    try
    {
        _unityContainer.Resolve<ICustomerViewViewModel>(new ParameterOverride("customer", customer));
        _regionManager.RequestNavigate("MainRegion", "CustomerView");
    }
    catch (Exception ex)
    {

    }
}

谢谢。

4

3 回答 3

0

所以我做了以下事情:

var clientView = _unityContainer.Resolve<IClientView>(new ParameterOverride("clientId", client.ClientId).OnType<ClientViewViewModel>());
                _regionManager.Regions["MainRegion"].Add(clientView);
                _regionManager.RequestNavigate("MainRegion", "ClientView");

本质上:

  1. 让我的 ClientViewViewModel 实现 IRegionMemberLifetime 接口并让 KeepAlive 属性返回 False 以确保我每次导航到我的视图时都创建一个新的 ViewModel。
  2. 让统一解决我一个新的 ClientView 覆盖 ClientViewViewModel 的“客户端”参数。
  3. 将我新解决的视图添加到我要显示的区域
  4. 导航到我的视图
于 2013-01-13T14:47:42.643 回答
0

我认为 Prism 不支持将对象/类传递给导航请求。但是,您可以将字符串/id 传递给接收方法。这是你如何做到的:

var query = new UriQuery();
query.Add("Customer", Customer.Id);
_regionManager.RequestNavigate("MainRegion",
         new Uri("CustomerView" + query.ToString(), UriKind.Relative));

现在,您可以使用此 id 并从数据库或任何地方获取您的对象。

于 2013-01-07T17:02:30.973 回答
0

这里有两个链接,我想这是你想知道的。

棱镜/统一导航问题

WPF/PRISM/MVVM 中的参数覆盖

于 2014-11-17T15:37:49.763 回答