首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从子ViewModel访问父ViewModel属性?

如何从子ViewModel访问父ViewModel属性?
EN

Stack Overflow用户
提问于 2021-03-13 13:21:02
回答 1查看 970关注 0票数 0

我有一个带有属性的ParentViewModel

代码语言:javascript
复制
class ParentViewModel : BaseObservableObject
{
    private string _text = "";

    public string Text //the property
    {
        get { return _text; }
        set
        {
            _text = value;
            OnPropertyChanged("Text");
        }
    }

    ChildViewModel _childViewModel;

    public ParentViewModel()
    {
        _childViewModel = new ChildViewModel(Text);
    }

和ChildViewModel,我想从它访问父级"Text“属性,以便从ChildViewModel内部设置它,我尝试了以下方法

代码语言:javascript
复制
class ChildViewModel : BaseObservableObject
{

    public string _text { get; set; }

    public ParentViewModel(string Text)
    {
        _text = Text;

        _text += "some text to test if it changes the Text of the parent"; //how I tried to set it
    }

但是它不能工作的原因是因为c#中的字符串是不可变的,然后我尝试将父对象作为一个有效的构造函数参数发送,但是我不想将整个父对象作为构造函数参数发送。这就是我如何从内部孩子中设置父母财产的方法。

代码语言:javascript
复制
parentViewModel.Text += "some text";

编辑:我尝试从其子VM访问父VM属性,以便从子VM中设置它,并在父VM中对其进行更改。最后,我了解了Mediator模式,这是一种存储操作并从任何尝试访问它们的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-13 14:25:38

对于ViewModels之间的通信,我建议实现许多MVVM框架中包含的Messenger模式,例如:

https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/june/mvvm-the-mvvm-light-messenger-in-depth

作为有点脏的解决方案,您可以传递一个Action而不是string属性。

https://learn.microsoft.com/en-us/dotnet/api/system.action-1?view=net-5.0

代码语言:javascript
复制
public ChildViewModel(Action<string> updateText)
{
    updateText("my new value")
}

以及在父母中创建ChildViewModel:

代码语言:javascript
复制
new ChildViewModel(x => Text = x);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66613990

复制
相关文章

相似问题

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