2016-07-26 1 views
1

내 앱은 중첩 ViewModel 구조를 사용합니다. 하위 뷰 모델 목록이 포함 된 상위 뷰 모델이 있습니다. 바인딩이 잘 작동하고 버튼을 통해 릴레이 명령을 실행할 수 있습니다.중첩 된 MVVM 및 RelayCommand

이 작업은 정상적으로 수행되지만 상위 뷰가 아닌 하위 뷰 모델에서만 데이터에 액세스 할 수 있습니다. 부모 viewmodel에서 데이터에 액세스하거나 부모 viewmodel에서 함수를 실행하고 필요한 데이터를 자식에서 부모로 전달하려면 어떻게해야합니까?

편집 : 이것은 내보기 모델이 어떻게 생겼는지 :

부모 :

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와 이름을 모두 사용할 필요가있다 상위 뷰 모델과 나는 RelayCommands에서 그들 중 하나만 액세스 할 수 있습니다.

+0

당신이보기를 구성 어떻게 우리에게 보여 주시겠습니까 모델? 적어도 간단히 .. –

+0

원본 모델을 viewmodels로 업데이트했습니다.이 기능이 도움이되기를 바랍니다. – slimshady

+0

내 대답을 확인 했습니까? 귀하의 질문에 대한 대답은 받아 들여지지 않습니까? :) –

답변

0

부모보기 모델에서 데이터에 액세스하거나 부모보기 모델에서 함수를 실행하고 필요한 데이터를 자식에서 부모에게 전달하는 방법은 무엇입니까? 당신의 RelayCommand 필요가 매개 변수와 함께 실행되는 경우

, 당신은 RelayCommand<T> 대신 RelayCommand 사용해야합니다. 당신은 Child ViewModel의 List를 가지고 있기 때문에, 당신은 child view model에 정확하게 접근 할 수 있다고 가정한다. 그리고 예를 들어, 다음과 같이 부모 뷰 모델의 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(); 
} 
관련 문제