因此,如果我清楚地理解,ProjectList
应该从“LoginViewModel”和“ProjectsViewModel”访问属性。我会尝试在“MainViewModel”中实现它,以便子视图模型可以自然地访问它。
IEventAggregator 就像一个盒子,您可以在其中添加事件,或者查找和订阅一个事件,所以我会说这不是您所需要的。无论如何,您可以在 中注册您的自定义界面(框类型)UnitySingleton.Container
,这将ProjectList
使其在任何地方都可以访问。当作为独立程序集的模块需要相互通信时,这种方法很有意义。如果这在您的情况下是否过大是您应该决定的事情,我个人会选择“将其放入 mainviewmodel”选项。
-- 样品 -- (未测试)
public class MainViewModel : ViewModelBase
{
public MainViewModel()
{
LoginVM = new LoginViewModel(this);
ProjectsVM = new ProjectsViewModel(this);
RetrieveProjectList();
}
public LoginViewModel LoginVM { get; private set; }
public ProjectsViewModel ProjectsVM { get; private set; }
public object ProjectList { get; private set; }
private void RetrieveProjectList()
{
ProjectList = ....
}
}
如您所见,它非常简单,LoginVM
并且ProjectsVM
将保存对MainViewModel
创建它们的引用,因此允许它们访问ProjectList
.