使用MVVM Light向Silverlight中的未构造类发送消息

时间:2011-03-02 07:42:47

标签: silverlight mvvm mvvm-light

嘿伙计们, 我正在使用Silverlight和MVVM模式构建项目,我需要做的是,导航到一个页面,其中包含一个视图模型作为LayoutRoot的DataContext,我需要将一个对象传递给它查看模型进行编辑,但由于它尚未构建,我无法使用MVVM Light Messenger类,因为为了发送消息,您需要先注册该指定类型。

因此可以在构建视图模型类之前发送消息,并且在构造它时我能够获得消息吗?

2 个答案:

答案 0 :(得分:0)

应在设置根视觉之前创建所有视图模型。

设置断点

Set breakpoints

Set breakpoint at MainViewModel()

Set breakpoint at Sub3View()

首先点击MainViewModel()。

MainVieModel() is hit first

点击Sub3ViewModel(),监听器注册。

Sub3ViewModel() is hit, listener registered

RootVisual已设置。

RootVisual is set

答案 1 :(得分:0)

我自己没有尝试过,但是this guy似乎对这个常见问题有了很好的解决方案。您可以通过查看实现它的单个cs文件的WP7Contrib.Messaging文件夹来查看它的源代码(无需下载整个contrib项目)here。整个项目适用于移动应用程序(特别是WP7),但这种自定义Messenger实现实际上是独立的。

基本上,他创建了一个特殊的Messenger实现,每当有新的注册来监听它时,它会“重新发送”给定类型签名的最后一条消息。这样,第一个VM可以发送它的消息,第二个VM将被创建(可能是你的IoC容器或其他)并注册监听并立即获得它存在之前发送的消息。

当然,这可能会对种族条件产生一些影响。它依赖于在给定的接收者有机会接收到给定签名之前不发送任何其他消息。但实际上,我认为这不是一个问题。特别是如果您充分利用消息的目标和发件人部分。