首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套MVVM和RelayCommand

嵌套MVVM和RelayCommand
EN

Stack Overflow用户
提问于 2016-07-26 12:06:32
回答 1查看 188关注 0票数 1

我的应用程序使用嵌套的ViewModel结构。我有一个父视图模型,它包含一个子视图模型的列表。绑定工作正常,我可以从按钮执行中继命令。

虽然这很好,但我只能从子视图模型中访问数据,而不能从父视图访问数据。如何从父视图模型访问数据或在父视图模型上执行函数并将其所需的数据从子视图传递给父视图模型?

编辑:这就是我的视图模型的样子:

父级:

代码语言:javascript
复制
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;
        }
    }

儿童:

代码语言:javascript
复制
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中访问其中的一个。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-27 10:19:14

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

如果需要使用参数执行RelayCommand,则需要使用RelayCommand<T>而不是RelayCommand。因为您有一个子ViewModel列表,所以我假设您可以正确地访问子视图模型。然后,您可以修改父视图模型中的RelayCommand,如下所示:

代码语言:javascript
复制
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;
    }
}

然后,在您的子视图模型中,例如:

代码语言:javascript
复制
public ChildViewModel()
{
    ChildCommand = new RelayCommand<string>((s) => Test(s));
}

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

private void Test(string s)
{
    throw new NotImplementedException();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38589454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档