【问题标题】:Silverlight 4: Reliable Commanding with RequerySuggested Functionality?Silverlight 4:具有 RequerySuggested 功能的可靠命令?
【发布时间】:2011-01-05 19:21:56
【问题描述】:

我在 Silverlight 中遇到的主要问题之一是它缺乏强大的命令支持 (ala WPF)。更具体地说,我发现很难干净地应用 MVVM 模式并进行合理的封装,因为需要在任何可能影响命令状态的属性上手动调用 RaiseCanExecuteChanged()。

例如,我有一个绑定到父/子 ViewModel 的父/子视图。父 View 绑定到父 ViewModel 上的命令。父视图有多个子视图,每个子视图都是一个用户控件,其中包含一系列与子视图模型绑定的内置控件(文本框、组合框等)。

父命令的状态(即是否可以执行)基于每个子控件的状态。例如,所有子用户控件的所有文本框都必须具有有效值。这需要这些控件绑定每个调用 RaiseCanExecuteChanged() 的属性,这意味着它们必须了解 ICommand 本身或调用 RaiseCanExecuteChanged() 方法的委托。

我觉得注入命令或委托是错误的,尤其是在比上述更复杂的情况下,例如当有 3 层以上的控件时,这些引用需要一直沿链传递。这也需要更多的内务处理,因为每次实例化一个孩子时,都必须采取额外的步骤来添加命令或委托。

如果 Silverlight 像 WPF 一样支持 CommandManager.RequerySuggested 功能,这一切都会变得更简单。

我看到一些文章建议可以在 Silverlight (one such article) 中实现 RequerySuggested,但很少看到关于它是否可靠且性能是否充分的评论。

其他人如何使用 Silverlight 解决此限制?

【问题讨论】:

    标签: silverlight silverlight-4.0


    【解决方案1】:

    我过去使用的一种方法是使用来自 Laurent Bugnion 的 MVVM Light 框架 (http://blog.galasoft.ch/archive/2009/09/27/mvvm-light-toolkit-messenger-v2-beta.aspx) 的消息传递引擎。

    本质上,孩子们发送消息以请求需要命令。可以坐在父级中的侦听器响应消息并调用 RaiseCanExecuteChanged()。

    我发现 MVVM Light 对于消息传递引擎来说是值得的。尽管在释放父视图时您必须小心并取消注册侦听器。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-02-06
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      相关资源
      最近更新 更多