2017-08-31 2 views
0

私は最良の実装を見つけるのに苦労しています。プリズム - ビューモデル間でデータを移動する

私はプリズムを使用していますが、その中に小さな領域があるビュー(ParentView)があります。 ddlの項目に応じて、別の小さなビュー(ChildView)がParentViewの領域に注入されます。

ChildViewには、ParentViewからアクセスしたいプロパティがいくつかあります。

したがって、私はPublish/Subscribeメソッドを使用してビューモデル間でデータを移動できますが、問題はPublishをハングアップすることがないことです。ビューはTextBoxesとイベントトリガーで構成されています。 ChildViewは、ddlの選択に基づいて大きく異なる可能性があります。私はそれが自分のビューは、ParentViewの内部に注入されている各ChildViewのきれいな分離が好きです。

これを達成する最も良い方法は何ですか?

答えて

0

あなたのビューモデルにインターフェイスINavigationAwareを実装することができます。その後、onNavigatedFrom()、onNavigatedTo()およびonNavigatingTo()メソッドを使用してイベントを登録できます。

EDIT:

あなたがイベントを起動したい場合は、子のフィールドが変更されたとき、あなたがこのような何か行うことができます:イベントを変更YourFieldこの場合には

private string _yourField; 

public string YourField 
     { 
      get { return _yourField; } 
      set { SetProperty(ref _yourField, value); 
        //Here you can launch the event 
       } 
     } 

が起動されます。

+0

私はそれについて考えました。しかし、ナビゲーションメソッドは、ChildViewがロードされたときにのみヒットします。彼らが記入された後、私はChildViewのプロパティ値を取得する必要がありました。 – theTechGrandma

+0

私は私の応答を編集しました。これがあなたにとって良い解決策になるかどうかを確認してください。 – TeoVr81

+0

ありがとう!あなたは近くにいた。私は下に自分のソリューションを掲載しました。 – theTechGrandma

0

私はいくつかの実装を試みましたが、動作していたのは、ChildView(childviewmodel)のシングルトンインスタンスを作成し、そのインスタンスを介してプロパティにアクセスすることでした。それはきれいではないかもしれませんが、うまくいきます。

private static ChildViewModel _instance = new ChildViewModel(); 
    public static ChildViewModel Instance { get { return _instance; } } 

    #region Properties 

    private ChildModel _childModel= new ChildModel(); 
    public ChildModel _childModel 
    { 
     get { return _instance._childModel; } 
     set 
     { 
      SetProperty(ref _instance._childModel, value); 
     } 
    } 

    private string _childProperty1; 
    public string ChildProperty1 
    { 
     get { return _childProperty1; } 
     set 
     { 
      SetProperty(ref _childProperty1, value); 
      ChildModel.ChildProperty1= _childProperty1; 
     } 
    } 

実際には、多くの子プロパティがありました。私はデモのために1つだけを挙げました。私はParentViewでそれを呼びます。

var _instance = ChildViewModel.Instance; 
var _cm = _instance.ChildModel; 

_parentModel = new ParentModel 
{ 
    Property1= ParentViewProperty1, 
    Property2= _cm.ChildProperty1, 
    }; 

希望は他の誰かに役立ちます。

関連する問題