mvvm中的公共/全局数据在哪里? 我试图让我的头脑围绕MVVM,想出一个测试应用程序,我认为这会给我一个很好的基础。假设我的应用程序有一个服务,它每分钟都在运行,并在机场获取最新的航班到达和起飞信息。现在假设我有3种不同的视图:InboundView、OutboundView和GateView。入站和出站视图将简单地显示入站和出站航班的各种航班详细信息,我相信我们都在机场的航班板上看到了这些信息。GateView将显示类似的航班信息,但可能按gate而不是flight排序

mvvm中的公共/全局数据在哪里? 我试图让我的头脑围绕MVVM,想出一个测试应用程序,我认为这会给我一个很好的基础。假设我的应用程序有一个服务,它每分钟都在运行,并在机场获取最新的航班到达和起飞信息。现在假设我有3种不同的视图:InboundView、OutboundView和GateView。入站和出站视图将简单地显示入站和出站航班的各种航班详细信息,我相信我们都在机场的航班板上看到了这些信息。GateView将显示类似的航班信息,但可能按gate而不是flight排序,mvvm,Mvvm,因此,飞行对象的模型将包含飞行数据详细信息以及登机门对象的实例,一旦航班到达,该实例将被适当更新 因此,所有3个视图都使用相同的飞行数据服务,我知道我可以将该服务的一个实例传递给每个VM,但是我需要在每个视图模型上连接适当的INPC事件,随着视图/VM数量的增加,这似乎不太理想 现在,每个虚拟机都使用一个ListCollectionView来包装传入的航班数据集合,我只是根据入站/出站等进行排序/筛选。。但我希望将服务结果合并到一种父视图模型中,然后将对自身的引用传递到子视图,然后我就可以处理所

因此,飞行对象的模型将包含飞行数据详细信息以及登机门对象的实例,一旦航班到达,该实例将被适当更新

因此,所有3个视图都使用相同的飞行数据服务,我知道我可以将该服务的一个实例传递给每个VM,但是我需要在每个视图模型上连接适当的INPC事件,随着视图/VM数量的增加,这似乎不太理想

现在,每个虚拟机都使用一个ListCollectionView来包装传入的航班数据集合,我只是根据入站/出站等进行排序/筛选。。但我希望将服务结果合并到一种父视图模型中,然后将对自身的引用传递到子视图,然后我就可以处理所有INPC,等等。。如果特定航班上的数据发生变化(如登机门),则父视图模型级别的事件以及这些事件将自动向下流至每个子视图,而不必在每个虚拟机中单独处理这些事件

我已经研究了MVVM Light的Messenger框架,但似乎每个子VM都必须注册消息并单独响应

这有意义吗?我走对了吗

因此,所有3个视图都使用相同的飞行数据服务,我知道我可以将该服务的一个实例传递给每个VM,但是我需要在每个视图模型上连接适当的INPC事件,随着视图/VM数量的增加,这似乎不太理想

如果“服务”实现了INotifyPropertyChanged,则不必这样做。请记住,您可以绑定到属性中的属性,即:
{Binding Path=FlightService.Gate}
或任何可能有效的东西。(不过,在这里很难了解您的要求。)

我已经研究了MVVM Light的Messenger框架,但似乎每个子VM都必须注册消息并单独响应

是的,如果您想使用消息传递框架,则需要在每个ViewModels中处理此问题。或者,您可以使用某种形式的服务位置或构造函数注入来“引入”航班服务。后者是我个人在这里的偏好

在每个虚拟机中处理这个问题的优点是,每个虚拟机可能希望以不同的方式处理问题(否则,为什么会有多个虚拟机?)。通过IoC在中提取对服务的引用,您可以根据需要处理此问题

因此,所有3个视图都使用相同的飞行数据服务,我知道我可以将该服务的一个实例传递给每个VM,但是我需要在每个视图模型上连接适当的INPC事件,随着视图/VM数量的增加,这似乎不太理想

如果“服务”实现了INotifyPropertyChanged,则不必这样做。请记住,您可以绑定到属性中的属性,即:
{Binding Path=FlightService.Gate}
或任何可能有效的东西。(不过,在这里很难了解您的要求。)

我已经研究了MVVM Light的Messenger框架,但似乎每个子VM都必须注册消息并单独响应

是的,如果您想使用消息传递框架,则需要在每个ViewModels中处理此问题。或者,您可以使用某种形式的服务位置或构造函数注入来“引入”航班服务。后者是我个人在这里的偏好

在每个虚拟机中处理这个问题的优点是,每个虚拟机可能希望以不同的方式处理问题(否则,为什么会有多个虚拟机?)。通过IoC在中提取对服务的引用,您可以根据需要处理此问题