Причина, по которой вы не видите изменения, отраженного в TextBlock
, заключается в том, что current_command
- это просто поле, поэтому Binding
не знает, когда оно было обновлено.
Самое простоеЧтобы исправить это, нужно, чтобы ваш класс History
реализовал INotifyPropertyChanged
, преобразовал current_command
в свойство и затем вызвал событие PropertyChanged
в установщике вашего свойства:
public class History : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
private string _current_command;
public string current_command
{
get
{
return _current_command;
}
set
{
if (_current_command == null || !_current_command.Equals(value))
{
// Change the value and notify that the property has changed
_current_command = value;
NotifyPropertyChanged("current_command");
}
}
}
}
Теперь, когда вы присваиваете значение current_command
, событие срабатывает, и Binding
также узнает, как обновить свою цель.
Если вы обнаружите, что у вас много классов, где выЕсли вы хотите связать их свойства, вам следует рассмотреть возможность перемещения события и вспомогательного метода в базовый класс, чтобы вы не писали один и тот же код несколько раз.