Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight中的MVVM(ICommand)_Silverlight_Mvvm_Icommand - Fatal编程技术网

Silverlight中的MVVM(ICommand)

Silverlight中的MVVM(ICommand),silverlight,mvvm,icommand,Silverlight,Mvvm,Icommand,请不要严格判断这个问题是之前讨论过的,还是在附近巨大的prism和mvvm博客中间接回答过的。 在RelayCommand或DelegateCommand类的WPF实现中,有这样一个eventhandler /// <summary> /// Occurs whenever the state of the application changes such that the result /// of a call to <see cref="CanExecute"/>

请不要严格判断这个问题是之前讨论过的,还是在附近巨大的prism和mvvm博客中间接回答过的。 在RelayCommand或DelegateCommand类的WPF实现中,有这样一个eventhandler

/// <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; }
}
//
///每当应用程序的状态发生更改,从而导致
///对的调用可能返回不同的值。
/// 
公共事件事件处理程序CanExecuteChanged
{
添加{CommandManager.RequerySuggested+=value;}
删除{CommandManager.RequerySuggested-=value;}
}
但在名称空间的SL子集中没有CommandManager类。这就是我被困的地方。在采用MVVM for SL时,我还没有找到解决方法(PRISM对我来说太复杂了)。不同的简单HelloWorldMVVM应用根本无法处理


提前感谢并为我的英语道歉-

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

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


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

Silverlight 4.0支持ICommand接口,因此将提供类似WPF的指挥基础设施。

我认为您有点错误-支持ICommand(可能有限制,但它存在并且类ICommand存在)在Silverlight 2中,
ICommand
接口确实是在Silverlight中定义的,但它没有在任何地方使用,而且在Silverlight中没有WPF中与MVVM模式配合良好的整个指挥基础设施。谢谢。我认为ICommand的存在意味着完全的指挥支持,所以我错了-(因此,事实证明,在SL中实现MVVM并不像在WPF中那么容易。到目前为止,我只找到了一种方法——像这样使用附加的属性和行为:或者使用ready framework,其中包含许多事件