Silverlight - MVVM友好的方式将参数传递给嵌入式用户控件?

时间:2011-03-14 10:08:50

标签: wpf mvvm silverlight-4.0 user-controls

以下是该方案:

我有一个“订单查询”用户控件,允许用户浏览订单并选择一个。订单查找用户控件中嵌入了“订单详细信息”用户控件,在选择订单之前,该控件不可见,此时它会显示订单详细信息。

问题是 - 如何将所选订单ID传递到订单明细用户控件并从订单查找用户控件获取要加载的订单(即设置订单详细信息视图模型的CurrentOrderID属性,并调用它的LoadOrder方法),一种MVVM友好的方式(即没有对用户控件的控件的代码引用)。

如果我可以从订单查找的viewmodel引用订单明细的viewmodel的活动实例,那将是直截了当的,但我看不到如何做到这一点。

我当前的方法是将CurrentOrderID属性设置为static(因此我可以从订单查找的viewmodel设置它而不引用订单详细信息的viewmodel的活动实例)并且在订单详细信息中运行一个具有1s间隔的计时器viewmodel检查CurrentOrderID属性中的更改。然而,它有一种难闻的气味和一些不必要的副作用!

1 个答案:

答案 0 :(得分:1)

你应该有两个ViewModel的两个视图。然后,根据您使用的MVVM框架(如果有),您应该使用消息传递机制在ViewModel(Mediator模式)之间交换数据。

订单VM发送消息,选择订单已更改(通过Messenger),OrderDetail VM收到此消息并做出相应的反应。

Messenger一方负责订阅另一方的接收方以发送给子网。所以不需要定期检查任何东西,它应该是基于事件的。

考虑使用例如MVVM Light及其Messenger类:

http://mvvmlight.codeplex.com/