以下是该方案:
我有一个“订单查询”用户控件,允许用户浏览订单并选择一个。订单查找用户控件中嵌入了“订单详细信息”用户控件,在选择订单之前,该控件不可见,此时它会显示订单详细信息。
问题是 - 如何将所选订单ID传递到订单明细用户控件并从订单查找用户控件获取要加载的订单(即设置订单详细信息视图模型的CurrentOrderID属性,并调用它的LoadOrder方法),一种MVVM友好的方式(即没有对用户控件的控件的代码引用)。
如果我可以从订单查找的viewmodel引用订单明细的viewmodel的活动实例,那将是直截了当的,但我看不到如何做到这一点。
我当前的方法是将CurrentOrderID属性设置为static(因此我可以从订单查找的viewmodel设置它而不引用订单详细信息的viewmodel的活动实例)并且在订单详细信息中运行一个具有1s间隔的计时器viewmodel检查CurrentOrderID属性中的更改。然而,它有一种难闻的气味和一些不必要的副作用!
答案 0 :(得分:1)
你应该有两个ViewModel的两个视图。然后,根据您使用的MVVM框架(如果有),您应该使用消息传递机制在ViewModel(Mediator模式)之间交换数据。
订单VM发送消息,选择订单已更改(通过Messenger),OrderDetail VM收到此消息并做出相应的反应。
Messenger一方负责订阅另一方的接收方以发送给子网。所以不需要定期检查任何东西,它应该是基于事件的。
考虑使用例如MVVM Light及其Messenger
类: