6

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

在此先感谢并为我的英语感到抱歉-)

4

2 回答 2

5

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

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

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

于 2009-08-10T19:58:10.877 回答
5

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

于 2010-03-10T16:14:05.283 回答