2016-07-26 2 views
1

my appは、ネストされたViewModel構造体を使用します。子ビューモデルのリストを含む親ビューモデルがあります。バインディングはうまく動作し、ちょうど良いボタンからリレーコマンドを実行できます。ネストされたMVVMとRelayCommand

これは正常に動作しますが、親からではなく、子ビューモデル内からのみデータにアクセスできます。親ビューモデルからデータにアクセスする方法、または親ビューモデルで関数を実行し、必要なデータを子から親に渡すにはどうすればよいですか?

編集:これは私の見解モデルがどのように見えるか:

親:

public string Name { get; set; } 
public List<ChildViewModel> Children { get; set; } 

private RelayCommand _parentCommand; 

    public RelayCommand ParentCommand 
    { 
     get 
     { 
      if (_parentCommand== null) 
      { 
       _parentCommand= new RelayCommand(() => 
       { 
        //some code 
       }, 

       () => true);     
      } 

      return _parentCommand; 
     } 
    } 

子供:

public string Name_Child { get; set; } 

private RelayCommand _childCommand; 

    public RelayCommand ChildCommand 
    { 
     get 
     { 
      if (_childCommand== null) 
      { 
       _childCommand= new RelayCommand(() => 
       { 
        //some code 
       }, 

       () => true);     
      } 

      return _childCommand; 
     } 
    } 

私の問題は、私はからName_Childと名前の両方を使用する必要があるということです親viewmodelと私はRelayCommandsでそれらの1つにしかアクセスできません。

+0

あなたはどのようにあなたがあなたのビューを構築します私たちを見るくださいすることができモデル? –

+0

元の投稿をviewmodelsで更新しましたが、これが役立つことを願っています。 – slimshady

+0

あなたは私の答えをチェックしましたか?それはあなたの質問のための受け入れられた答えですか? :) –

答えて

0

親ビューモデルからデータにアクセスする方法、または親ビューモデルで関数を実行して、必要なデータを子から親に渡すにはどうすればよいですか?

パラメータで実行するためにあなたのRelayCommand必要がある場合は、RelayCommand<T>の代わりRelayCommandを使用する必要があります。あなたはChild ViewModelのListを持っているので、私はあなたが子ビューモデルに正しくアクセスできると仮定します。そこで例えば、あなたはこのようなあなたの親ビューモデルにRelayCommandを変更することができます。

private RelayCommand<string> _parentCommand; 
private string parameter; 

public RelayCommand<string> ParentCommand 
{ 
    get 
    { 
     if (_parentCommand == null) 
     { 
      _parentCommand = new RelayCommand<string>(parameter => child.ChildCommand.Execute(parameter)); 

     } 

     return _parentCommand; 
    } 
} 

次に例えば、あなたの子ビューモデルに:

public ChildViewModel() 
{ 
    ChildCommand = new RelayCommand<string>((s) => Test(s)); 
} 

public RelayCommand<string> ChildCommand { get; set; } 

private void Test(string s) 
{ 
    throw new NotImplementedException(); 
} 
関連する問題