0

顧客を追加または編集するためのビューと対応するビュー モデルがあります。

[新しい顧客を追加] ボタンをクリックすると、Unity によって光沢のある新しい CustomerView が作成され、データ コンテキストとビュー モデル、およびコンストラクター パラメーターである顧客オブジェクトが渡されます。

顧客を保存しましたが、データグリッドから別の既存の顧客レコードを表示したいと考えています。

データグリッドから selectedItem (Customer) を受け入れるコマンドがあり、ビュー モデルのコンストラクターで、これをパラメーターとして CustomerView に渡したいと考えています。

Client パラメーターを使用してビュー ビュー モデルを構築し、ビューに移動したいことを Unity に伝えるにはどうすればよいですか?

編集 ビューを 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 の「顧客」パラメータを 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

ここに2つのリンクがあります。あなたが知りたいと思う.

Prism/Unity ナビゲーションの質問

WPF/PRISM/MVVM の ParameterOverride

于 2014-11-17T15:37:49.763 に答える
0

Prism がオブジェクト/クラスをナビゲーション リクエストに渡すことをサポートしているとは思わない。ただし、string/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

だから私がしたことは次のとおりでした:

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. ユニティを持つことで、ClientViewViewModelの「クライアント」パラメーターをオーバーライドする新しいClientViewが解決されます。
  3. 新しく解決したビューを表示したい領域に追加します
  4. マイビューに移動
于 2013-01-13T14:47:42.643 に答える