嵌套的 MVVM 和 RelayCommand
Nested MVVM and RelayCommand
我的应用使用嵌套的 ViewModel 结构。我有一个 parent 视图模型,其中包含一个 child 视图模型列表。绑定工作正常,我可以很好地从按钮执行中继命令。
虽然这工作正常,但我只能从 child 视图模型中访问数据,而不能从 parent 中访问数据。如何从 parent 视图模型访问数据或在 parent 视图模型上执行函数并将其所需的数据从 child 传递到 parent?
编辑:这是我的视图模型的样子:
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;
}
}
Child:
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 和 parent 视图模型中的名称,我只能在 RelayCommands 中访问其中之一。
How can I access data from the parent viewmodel or execute a function on the parent viewmodel and pass the data it needs from the child to the parent?
如果你的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;
}
}
然后在您的子视图模型中:
public ChildViewModel()
{
ChildCommand = new RelayCommand<string>((s) => Test(s));
}
public RelayCommand<string> ChildCommand { get; set; }
private void Test(string s)
{
throw new NotImplementedException();
}
我的应用使用嵌套的 ViewModel 结构。我有一个 parent 视图模型,其中包含一个 child 视图模型列表。绑定工作正常,我可以很好地从按钮执行中继命令。
虽然这工作正常,但我只能从 child 视图模型中访问数据,而不能从 parent 中访问数据。如何从 parent 视图模型访问数据或在 parent 视图模型上执行函数并将其所需的数据从 child 传递到 parent?
编辑:这是我的视图模型的样子:
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;
}
}
Child:
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 和 parent 视图模型中的名称,我只能在 RelayCommands 中访问其中之一。
How can I access data from the parent viewmodel or execute a function on the parent viewmodel and pass the data it needs from the child to the parent?
如果你的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;
}
}
然后在您的子视图模型中:
public ChildViewModel()
{
ChildCommand = new RelayCommand<string>((s) => Test(s));
}
public RelayCommand<string> ChildCommand { get; set; }
private void Test(string s)
{
throw new NotImplementedException();
}