2013-01-05 58 views
0

我有添加或編輯客戶的視圖和相應的視圖模型。WPF PRISM/Unity viewModel參數

如果我點擊添加新客戶按鈕,統一給我一個不錯的閃亮的新的CustomerView,並傳入我的datacontext和視圖模型,以及一個作爲構造器參數的客戶對象。

我保存我的客戶,現在想從我的數據網格中查看另一個現有客戶記錄。

我有一個命令,它接受來自datagrid的selectedItem(Customer),我現在想將它作爲參數傳遞給我的CustomerView,在View Model的構造函數中。

如何告訴Unity我現在想用我的客戶端參數構建我的視圖視圖模型,然後導航到視圖?

編輯 註冊我的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「customer」參數設置爲我的selectedItem(客戶)?

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

    } 
} 

謝謝。

+0

請添加相關的代碼.... – Blachshma

回答

0

我不認爲棱鏡支持傳遞一個對象/類到導航請求。但是,您可以將string/id傳入接收方法。這裏是你如何做到這一點:

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

現在,你可以使用這個號碼,並從數據庫或其他地方得到你的對象。

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,以確保我創建一個新的視圖模型每次我導航到我的看法。
  2. 讓我有一個新的ClientView覆蓋ClientViewViewModel的「client」參數。
  3. 我想要在
  4. 導航顯示區域加入我的新決心以我看來