2010-10-28 91 views
0

不知道我正确地设计了这个(guidence是赞赏!),但我有一个搜索视图,这是从许多地方调用。搜索屏幕有它自己的ViewModel。当用户从搜索屏幕上选择了某些内容(搜索后:)后,我需要将选择发送到要求搜索的任何视图(搜索屏幕是弹出窗口)。Silverlight命令动态绑定一个按钮? MVVM

我有一个视图定位器,当我发送消息时弹出屏幕屏幕。该消息从ViewModel(MVVM Light)发送到视图定位器。

是否注册回电?广播消息?设置一个属性?动态地将搜索屏幕上的“选择”按钮绑定回发起呼叫的视图模型?

MMMM这么多问题,这么短的时间...

问候, 理查德

回答

1

我不确定MVVM Light是否具有与EventAggregator相同的任何内容,但这是我认为可以为您播放此事件的最佳方式。

另一种选择是使用Reactive Extensions (Rx)并使接收方在打开搜索视图之前使用过滤器订阅事件,然后将过滤器传递到搜索视图,以便使用该过滤器调用实际操作,所以即使搜索视图模型请求搜索是另一个将接收事件的视图模型。

+0

我很想看到一个例子或一些想法。我一直在努力应对ViewModel层中的视图事件。我刚刚发现了反应性框架,我觉得这很有趣,但我现在只是略读表面。 我将你的回答标记为答案,因为我觉得它是正确的设计。但是我可能无法实现它。 (PRISM可能是这里的答案 - 但我听说这是一个非常沉重的层。) – codeputer 2010-10-29 19:25:03

+0

我不是故意插入我自己的项目太多,但ReactiveXaml可以帮助您通过提供很多“胶水代码”需要做这个东西 - 检查它在http://bit.ly/cqQmtW – 2010-10-31 04:03:32

0

我建议您通过参考界面元素使得呼叫转移到你的搜索。就我所知,所有这些都发生在视图模型层。

另一种选择是在搜索结果或搜索对象中设置一个标志,该标志记录了哪个接口发起了呼叫。我不确定在这种情况下如何进行回调。

1

我有一个类似的问题,这里是我如何做到这一点。

我对弹出式窗口有不同的ViewModel,视图模型带了一个你想要返回的对象的参数,例如,你有你的MainViewModel和一个属性Customer。在PopupViewModel构造函数中,我从MainViewModel传递了Customer。当我进行搜索并找到您要查找的客户时,将该客户分配给来自MainViewModel的客户参考。假设你已经实现了INotifyPropertyChange接口,只要你选择了一个客户,它就会显示在你的主屏幕上。让我知道你是否明白,否则我会给你发个例子。

希望这会有所帮助。

+0

感谢您的评论 - 这让我花了更多的时间来思考我在做什么,以及我怎么可能实施它有点不同。 – codeputer 2010-10-29 19:29:08

+0

我很高兴我向你提出了不同的想法:-)希望这一切都为你解决。 – Jag 2010-11-01 16:49:45