【发布时间】: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