2016-07-26 74 views
1

我的应用程序使用嵌套的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和名称父视图模型,我只能在RelayCommands中访问其中的一个。

+0

能否请你告诉我们,你如何组织你的观点楷模?至少短暂.. –

+0

我用viewmodels更新了我的原始帖子,我希望这有助于。 – slimshady

+0

你检查了我的答案吗?你的问题是否被接受? :) –

回答

0

如何从父视图模型访问数据或在父视图模型上执行一个函数并将其需要的数据从子项传递给父项?

如果您RelayCommand需要通过参数来执行,你需要使用RelayCommand<T>而不是RelayCommand。既然你有一个Child ViewModel列表,我假设你可以正确访问子视图模型。再比如说,你可以修改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(); 
} 
相关问题