我通过在线模板 - > WPF在VS2010-> WPF MVVM项目模板中创建了一个新的WPF MVVM应用程序。我创建了一个标记为“刷新已启用?”的复选框旁边的“刷新”按钮,我想单击时启用/禁用“刷新”按钮。我将我复选框的IsChecked
属性绑定到aMainWindowViewModel
属性,我调用CanRefreshDate
,并在其设置器中提升RaisePropertyChanged(()=>CanRefreshDate);
。同样在MainWindowViewModel
中,我添加了新创建的CanExecuteRefreshDate()
,它返回CanRefreshDate
属性的布尔值。但是,当我单击复选框时,“刷新”按钮永远不会启用/禁用以匹配。解决这个问题的正确方法是什么?这是模板中的疏忽还是什么?使用VS2010在线模板“WPF MVVM项目模板”,CanExecuteChanged不工作?
这里是我修改的模板代码:
的XAML:
<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;
}
我注意到,模板具有RaiseCanExecuteChanged()
在DelegateCommand.cs拼错RasieCanExecuteChanged()
和改变了。我可以通过删除RaiseCanExecuteChanged()
和修改
public event Handler CanExecuteChanged;
来得到它的所有工作:
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
不过,我想知道这种情况的妥善解决是什么,为什么模板doesn`工作。我错过了什么,做错了什么?请创建一个新的解决方案,并使用我所做的模板,并告诉我发生了什么!谢谢!
作者回应并发布了这个内置的模板修复版本4.1,修复了问题 – 2013-03-01 13:28:11