嵌套的MVVM和RelayCommand
本文关键字:RelayCommand MVVM 嵌套 | 更新日期: 2023-09-27 17:58:36
我的应用程序使用嵌套的ViewModel结构。我有一个父视图模型,其中包含子视图模型的列表。绑定工作得很好,我可以通过按钮执行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和Name,并且我只能在RelayCommands中访问其中一个。
如何访问父视图模型中的数据,或在父视图模型上执行函数,并将所需的数据从子视图传递给父视图?
如果您的RelayCommand
需要使用参数执行,则需要使用RelayCommand<T>
而不是RelayCommand
。由于您有一个子视图模型列表,我认为您可以正确访问子视图模型。例如,您可以修改父视图模型中的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;
}
}
然后在您的Child视图模型中,例如:
public ChildViewModel()
{
ChildCommand = new RelayCommand<string>((s) => Test(s));
}
public RelayCommand<string> ChildCommand { get; set; }
private void Test(string s)
{
throw new NotImplementedException();
}