Looking at the documentation for NotifyOfPropertyChange, you need to only return a property. The framework uses reflection to get the actual string to pass to "PropertyChanged"
By returning a string, you are breaking this system (and this would never work with normal INoifyPropertyChanged either).
You need to notify an actual property that returns the result of "CanLogOn", not try to notify a non-existent property.