gpt4 book ai didi

c# - 从一个 ViewModel 访问另一个 ViewModel 中的属性

转载 作者:太空狗 更新时间:2023-10-29 19:58:27 28 4
gpt4 key购买 nike

我希望主视图模型有一个特定的列表,然后从许多其他 View 模型访问。

例如,在 MainViewModel.cs 中我将有一个包含 50 个数字的列表,然后在 NumListViewModel.cs 中,我想访问它以便将其显示为列表,在 AddNumViewModel.cs 中我希望能够更新该列表。

有人建议我使用 events/evenaggerator,我确实这样做了,但不幸的是,据我所知,我所能做的就是从一个 View 向另一个 View 发送一个数字并告诉它更新列表,但问题是是,随着程序的增长,我将需要在主视图模型中有很多订阅者,当实际发生某些事情时,我将不得不根据订阅者的数量“发布”事件,这使得维护更加困难。

我还找到了另一个答案,指示在 mainVM 中创建 anotherVM 的实例,并将参数设置为“this”,这是对 mainVM 的引用。它有效,但话又说回来,它可能会变得很长。

所以我的问题是,是否有更好的方式从另一个 VM 访问属性?
就像在 mainVM 中拥有一个包含列表的类的实例,然后就可以从其他 VM 更新/访问它,而不必明确编程哪个 VM 可以。会让生活变得更轻松。

在您的回答中,请尽量避免建议框架。虽然有一些非常好的,但我希望至少自己能够做到这一点。

例如:

主虚拟机.cs:

public class MainVM
{
List lst = new List(); //Let's just say it's full...
}

其他VM.cs:

public class OtherVM
{
lst.Add(3);
}

PS:是的,我知道已经有人问过了,是的,我已经完成了我的研究,但我猜我发现的答案太“静态”了?

最佳答案

如果您希望从外部 ViewModel 中直接访问列表,那么您的选择是:

  1. 将列表作为构造函数参数或公共(public)属性传递给 OtherVM。然后 OtherVM 可以将其视为成员。

  2. 将 MainVM 作为构造函数参数或公共(public)属性传递给 OtherVM。然后OtherVM可以通过先访问MainVM来访问List。

例子:

public class MainVM
{
public List<XX> MyList { get; set; }
}

public class OtherVM
{
public MainVM TheMainVM { get; set; }

public OtherVM(MainVM theMainVM)
{
TheMainVM = theMainVM;

// Access the MainVM's list
TheMainVM.MyList.Add(stuff);
}
}
  1. 为 MainVM 提供一个称为“默认”或“实例”的静态属性,这样您就可以从 OtherVM 中访问 MainVM 的静态实例,而无需将其分配为成员字段。

例子:

public class MainVM
{
private static MainVM _instance = new MainVM();
public static MainVM Instance { get { return _instance; } }

public List<XX> MyList { get; set; }
//other stuff here
}

//From within OtherVM:
MainVM.Instance.MyList.Add(stuff);

关于c# - 从一个 ViewModel 访问另一个 ViewModel 中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16506653/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com