Вам нужно что-то сделать, чтобы вызвать событие CanExecuteChanged
команды при изменении _student.Title
.
Используете ли вы Prism DelegateCommand?Если так, Энди нашел этот ответ .Если поддерживается, это может быть предпочтительнее, чем предложение ниже.Но см. Этот вопрос , что похоже на ваш случай, когда свойство является свойством внука, а не прямым свойством класса, которому принадлежит команда.
Если вы используете Prism и можете это сделать, попробуйте заменить Student
, чтобы увидеть, что произойдет.В 2016 году это сломало бы команду enable update.Это может все еще.
Так что, если это не сработает, это должно быть.
Ваш класс DelegateCommand<T>
может иметь метод, который делает это;его часто называют RaiseCanExecuteChanged()
или что-то в этом роде.
Вероятно, лучший способ сделать это в установщике для Student
:
public Student Student
{
get { return _student; }
set
{
if (value != _student)
{
if (_student != null)
{
// You do want to unhook this, otherwise there's a live reference
// to the old _student and it won't be free to be garbage collected.
_student.PropertyChanged -= _student_PropertyChanged;
}
_student = value;
if (_student != null)
{
_student.PropertyChanged += _student_PropertyChanged;
}
OnPropertyChanged();
}
}
}
private void _student_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "Title")
{
ClickSaveChangesCommand.RaiseCanExecuteChanged();
}
}