我的应用程序使用嵌套的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和Name,而且我只能在RelayCommands中访问其中的一个。
发布于 2016-07-27 10:19:14
如何从父视图模型访问数据或在父视图模型上执行函数并将其所需的数据从子视图传递给父视图模型?
如果需要使用参数执行RelayCommand,则需要使用RelayCommand<T>而不是RelayCommand。因为您有一个子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();
}https://stackoverflow.com/questions/38589454
复制相似问题