在视图中使用RelayCommand是否可以?

时间:2016-06-17 10:45:38

标签: c# wpf mvvm relaycommand commandbinding

我过去几年一直在WPF工作,但从头开始没有完成任何项目。现在,我有机会这样做。

在进入项目之前,我已经开始提供一些基础。我为viewViewModel

的类库创建了一个单独的WPF项目

我一开始就受到了打击,我计划让RelayCommand中的ViewModel作为接口,将行动从View委托给Viewmodel。< / p>

我的问题是,我RelayCommand中的ViewModel是否正确?

我希望它应该在ViewModel中,但是RelayCommand

中的以下代码
public event EventHandler CanExecuteChanged
{
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}

CommandManager需要PresentationCore这是WPF特定的程序集。我不想在我的ViewModel中添加它。

我需要RelayCommand中的View吗?

1 个答案:

答案 0 :(得分:0)

将RelayCommand放入ViewModel中绝对正确。这使它可用于测试等目的!

您应该删除CanExecuteChanged中的代码并在RelayCommand实施中公开方法:

/// <summary>
/// Call this when the CanExecute of the command has changed, this allows things like UI to update.
/// </summary>
public void ExecuteChanged()
{
   CanExecuteChanged?.Invoke( this, EventArgs.Empty );
}

,只要CanExecute布尔值在您的命令上发生更改,您就可以调用(从ViewModel中的其他位置)。

当然,如果您没有确定是否可以执行命令的特殊方法,则可以从ExecuteChanged()属性设置器中调用CanExecute