gpt4 book ai didi

银光 4 : Reliable Commanding with RequerySuggested Functionality?

转载 作者:行者123 更新时间:2023-12-01 13:03:13 24 4
gpt4 key购买 nike

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

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

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

注入(inject)命令或委托(delegate)对我来说感觉不对,尤其是在比上述更复杂的情况下,例如当有 3 层以上的控件时,这些引用需要一直向下传递到链中。这也需要更多的内务处理,因为每次实例化子对象时,都必须执行添加命令或委托(delegate)的额外步骤。

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

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

其他人如何解决 Silverlight 的这一限制?

最佳答案

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

本质上, children 发送一条消息来请求需要命令。可以坐在父级中的监听器响应消息并调用 RaiseCanExecuteChanged()。

我发现 MVVM Light 仅对于消息传递引擎而言是值得的。尽管您必须小心并在处理父 View 时注销监听器。

希望对您有所帮助。

关于银光 4 : Reliable Commanding with RequerySuggested Functionality?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4608309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com