I created a new WPF MVVM application via Online Templates->WPF in VS2010->WPF MVVM project template. I created a checkbox labeled "Refresh Enabled?" next to the "Refresh" button that I wanted to enable/disable the "Refresh" button when clicked. I bound the IsChecked property of my checkbox to aMainWindowViewModel property I called CanRefreshDate, and it raises 'RaisePropertyChanged(()=>CanRefreshDate); in its setter. Also in the MainWindowViewModel, I added my newly created CanExecuteRefreshDate(), which returns the bool of CanRefreshDate property. However, when I click the checkbox, the button "Refresh" is never enabled/disabled to match. What is the proper way to fix this, and is this an oversight in the template or what?
Here's my modifications to the template code:
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; }
I noticed that the template had 'RaiseCanExecuteChanged()' misspelled 'RasieCanExecuteChanged() in DelegateCommand.cs and changed that. I was able to get it all working by removing RaiseCanExecuteChanged() and modifying thepublic event Handler CanExecuteChanged; to :
public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } }
However, I would like to know what the proper solution for this is and why the template doesn't work. Am i missing something, doing something wrong or what? Please create a new project and use the template I did and tell me what is going on! Thanks!
fdsfs
Frederick Von Stubenstein