微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Silverlight中的MVVM(ICommand)

请不要严格判断此问题是先前讨论过的,还是在附近的巨大棱镜和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应用程序根本不处理.

在此先感谢,抱歉我的英语 – )

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐