我在 VS2010->WPF MVVM 项目模板中通过 Online Templates->WPF 创建了一个新的 WPF MVVM 应用程序。我创建了一个标有“刷新已启用?”的复选框。在“刷新”按钮旁边,我想在单击时启用/禁用“刷新”按钮。IsChecked
我将我的复选框的属性绑定到aMainWindowViewModel
我调用的属性,并在其设置器中CanRefreshDate
引发。RaisePropertyChanged(()=>CanRefreshDate);
同样在 中MainWindowViewModel
,我添加了我新创建CanExecuteRefreshDate()
的,它返回属性的布尔值CanRefreshDate
。但是,当我单击复选框时,“刷新”按钮永远不会启用/禁用以匹配。解决此问题的正确方法是什么,这是模板中的疏忽还是什么?
这是我对模板代码的修改:
xml:
<CheckBox Content="Refresh Enabled?"
IsChecked="{Binding CanRefreshDate}"/>
MainWindowViewModel.cs:
private bool _CanRefreshDate;
public bool CanRefreshDate
{
get { return _CanRefreshDate; }
set
{
if (_CanRefreshDate != value)
{
_CanRefreshDate = value;
RaisePropertyChanged(() => CanRefreshDate);
}
}
}
public ICommand RefreshDateCommand { get { return new DelegateCommand(OnRefreshDate, CanExecuteRefreshDate); } }
private bool CanExecuteRefreshDate()
{
return CanRefreshDate;
}
我注意到模板在 DelegateCommand.cs 中RaiseCanExecuteChanged()
拼写错误RasieCanExecuteChanged()
并更改了它。通过删除RaiseCanExecuteChanged()
和修改
public event Handler CanExecuteChanged;
至 :
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
但是,我想知道什么是正确的解决方案,以及为什么模板不起作用。我错过了什么,做错了什么还是什么?请创建一个新的解决方案并使用我所做的模板并告诉我发生了什么!谢谢!