2016-07-26 7 views
1

Meine App verwendet eine verschachtelte ViewModel-Struktur. Ich habe ein Eltern-View-Modell, das eine Liste von Child-View-Modellen enthält. Die Bindung funktioniert einwandfrei und ich kann einen Relay-Befehl von einem Button aus ausführen.Verschachtelte MVVM und RelayCommand

Während dies funktioniert, kann ich nur auf die Daten innerhalb des untergeordneten Ansichtsmodells, nicht von der übergeordneten zugreifen. Wie kann ich auf Daten vom übergeordneten Ansichtsmodell zugreifen oder eine Funktion für das übergeordnete Ansichtsmodell ausführen und die erforderlichen Daten vom untergeordneten an das übergeordnete Modell übergeben?

Edit: Das ist es, was meine Ansicht Modelle wie folgt aussehen:

Parent:

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; 
     } 
    } 

Kind:

public string Name_Child { get; set; } 

private RelayCommand _childCommand; 

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

       () => true);     
      } 

      return _childCommand; 
     } 
    } 

Mein Problem ist, dass ich sowohl Name_Child und Namen verwenden müssen aus das übergeordnete Viewmodel und ich kann nur auf eines von ihnen in den RelayCommands zugreifen.

+0

Können Sie uns bitte zeigen, wie Sie die Ansicht strukturieren Sie Modelle? zumindest kurz .. –

+0

Ich habe meinen ursprünglichen Beitrag mit den Viewmodels aktualisiert, ich hoffe das hilft. – slimshady

+0

Haben Sie meine Antwort überprüft? Ist es die akzeptierte Antwort für Ihre Frage? :) –

Antwort

0

Wie kann ich auf Daten vom übergeordneten Ansichtsmodell zugreifen oder eine Funktion im übergeordneten Ansichtsmodell ausführen und die erforderlichen Daten vom untergeordneten zum übergeordneten Element übergeben?

Wenn Ihr RelayCommand Bedarf mit Parametern ausgeführt werden, müssen Sie RelayCommand<T> statt RelayCommand verwenden. Da Sie eine Liste von untergeordneten Ansichtsmodellen haben, gehe ich davon aus, dass Sie korrekt auf das untergeordnete Ansichtsmodell zugreifen können. Dann zum Beispiel, können Sie die RelayCommand in Ihrem Elternansicht Modell wie folgt ändern:

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; 
    } 
} 

dann in Ihrem Kind Ansicht Modell zum Beispiel:

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

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

private void Test(string s) 
{ 
    throw new NotImplementedException(); 
}