Silverlight中的MVVM(ICommand)

时间:2009-08-10 13:28:27

标签: silverlight mvvm icommand

请不要严格判断此问题是先前讨论过的,还是在附近的大型prism和mvvm博客中间接回答。 在RelayCommand或DelegateCommand类的WPF实现中,有一个这样的事件处理程序

/// <summary>
/// Occurs whenever the state of the application changes such that the result
/// of a call to <see cref="CanExecute"/> may return a different value.
/// </summary>
public event EventHandler CanExecuteChanged
{
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}

但在SL的命名空间子集中没有CommandManager类。这就是我被困住的地方。我还没有找到针对SL的MVVM采用的解决方法(PRISM对我来说太复杂了)。不同的简单HelloWorldMVVM应用程序根本不处理。

提前致谢并抱歉我的英语 - )

2 个答案:

答案 0 :(得分:5)

Silverlight中不支持命令。当用户在视图中操作控件时,您必须编写代码(例如事件处理程序),以修改视图后台代码中的视图模型。当用户单击视图中的按钮时,这可能就像在视图模型上调用方法一样简单。通过使用PRISM,您可以在XAML中为您的视图创建附加属性以摆脱这些事件处理程序,但如果您不想使用PRISM,您只需坚持使用事件处理程序。

您必须处理的另一个方面是在视图模型更改时修改视图。特别是,您需要根据视图模型的状态启用和禁用控件。要实现此目的,您必须将控件的IsEnabled属性绑定到视图模型中的某些内容,以反映是否允许某个操作。实现转换为布尔值的自定义IValueConverter对象通常很有用。例如,如果您的视图模型具有表示计数的属性,并且您希望仅在计数大于零时启用视图中的特定控件,则可以创建一个转换为true的值转换器。数字大于零,并在绑定中使用此值转换器。

如果您尝试调整MVVM应用程序的WPF示例,则必须摆脱命令的所有使用并替换您自己的代码。您的示例中的代码在Silverligt中没有意义,但在WPF中,它涉及确定视图中的控件是否已启用,可见等的过程。

答案 1 :(得分:5)

Silverlight 4.0支持ICommand接口,因此将提供类似命令基础架构的WPF。