C# 从MVVM中的子viewModel中引用方法和存储库

C# 从MVVM中的子viewModel中引用方法和存储库,c#,wpf,mvvm,C#,Wpf,Mvvm,仍然在MVVM中摸索,并且遇到了这个问题: 我有一个顶级的ViewModel,我们称之为ModelLevel1 我有一个子ViewModel,它属于它,一个控件用于它的所有绑定,我们称它为ControlViewModel1。该控件仅绑定到ControlViewModel1 在顶级Viewmodel中,有一个存储库,以及一个从存储库从id获取记录的方法 允许ControlViewModel1访问该方法以便从存储库获取记录的最佳方法是什么 干杯 抢劫 允许ControlViewModel1访问该方法

仍然在MVVM中摸索,并且遇到了这个问题:

我有一个顶级的ViewModel,我们称之为ModelLevel1

我有一个子ViewModel,它属于它,一个控件用于它的所有绑定,我们称它为ControlViewModel1。该控件仅绑定到ControlViewModel1

在顶级Viewmodel中,有一个存储库,以及一个从存储库从id获取记录的方法

允许ControlViewModel1访问该方法以便从存储库获取记录的最佳方法是什么

干杯

抢劫

允许ControlViewModel1访问该方法以便从存储库获取记录的最佳方法是什么

IMHO控件是自包含的单元,它们具有为VM的功能服务的依赖属性;因此不需要虚拟机

  • 在接受目标VM的控件上创建依赖项属性,从而可以访问该方法
  • 在应用程序上创建一个静态属性,该属性将包含有问题的VM,并作为静态调用访问它
  • MVVM只是关注点的分离,记住Xaml最终将
    编译成C#代码,并与代码一起执行。您在代码中用于访问方法和对象的任何进程也可以传递到页面上的控制实例

    按照以下步骤提取将记录获取到知道如何执行的类的逻辑,并将该依赖关系注入到两个ViewModels中


    这种方法可以被其他类重用,易于测试,性能良好(与聚合事件方案不同)。

    使用
    事件聚合器的发布和订阅
    。Ref@user2526236:我认为在这种情况下使用事件聚合器没有意义。这看起来更像是一种增加谷歌文章占有量的方式…控制反转。这迫使我研究依赖注入,实际上它并没有我想象的那么糟糕-这是一种相当整洁的做事方式。。。