我过去几年一直在WPF工作,但从头开始没有完成任何项目。现在,我有机会这样做。
在进入项目之前,我已经开始提供一些基础。我为view
和ViewModel
我一开始就受到了打击,我计划让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
吗?
答案 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
。