Quantcast
Channel: Windows Presentation Foundation (WPF) forum
Viewing all articles
Browse latest Browse all 18858

WPF MVVM project template RaiseCanExecuteChanged() not working?

$
0
0

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



Viewing all articles
Browse latest Browse all 18858

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>