【问题标题】:Silverlight Command Binding a button dynamically? MVVMSilverlight 命令动态绑定按钮? MVVM
【发布时间】:2010-10-28 01:36:23
【问题描述】:

不确定我的设计是否正确(感谢指导!),但我有一个从许多地方调用的搜索视图。搜索屏幕有它自己的 ViewModel。当用户从搜索屏幕中选择某些内容时(搜索后:),我需要将选择发送到请求进行搜索的任何视图(搜索屏幕是一个弹出窗口)。

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

我要注册回电吗?广播消息?设置属性?将搜索屏幕上的“选择”按钮动态绑定回发起调用的视图模型?

嗯嗯这么多问题,这么少时间......

问候, 理查德

【问题讨论】:

    标签: binding silverlight-4.0 mvvm-light


    【解决方案1】:

    我不确定 MVVM Light 是否有任何与 EventAggregator 等效的内容,但这是我能想到的让您广播此活动的最佳方式。

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

    【讨论】:

    • 我很想看到一个例子或一些想法。我一直在努力解决如何响应 ViewModel 层中的视图事件。我刚刚找到了反应式框架,我觉得这很有趣,但我现在只是在浏览表面。我将您的回复标记为答案,因为我认为这是正确的设计。但是,我可能无法实现它。 (PRISM 可能是这里的答案 - 但我听说它是​​一个相当重的层。)
    • 我并不是要过多地插入我自己的项目,但是 ReactiveXaml 通过提供大量执行此操作所需的“胶水代码”来帮助您完成此解决方案 - 看看在bit.ly/cqQmtW
    【解决方案2】:

    我遇到了类似的问题,这就是我的做法。

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

    希望这会有所帮助。

    【讨论】:

    • 感谢您的评论 - 这让我花了一些时间来思考我在做什么,以及我如何以不同的方式实现它。
    • 很高兴我让你有不同的想法 :-) 希望一切都对你有用。
    【解决方案3】:

    我建议您将引用传递给将调用转发到您的搜索的界面元素。据我所知,所有这些都发生在视图模型层。

    另一个选项是在搜索结果或搜索对象中设置一个标志,以记录哪个接口进行了调用。我不确定在这种情况下你会如何进行回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-07
      • 2013-06-07
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 2011-07-22
      相关资源
      最近更新 更多