Проблема в том, что вы обновляете источник для Binding
, в то время как Binding
обновляет вашу собственность. WPF фактически не будет проверять значение вашего свойства, когда оно вызывает событие PropertyChanged
в ответ на обновление Binding
. Вы можете решить эту проблему, используя Dispatcher
, чтобы задержать распространение события в этой ветви:
set
{
int val = int.Parse(value);
if (_runAfter != val)
{
if (val < _order)
{
_runAfter = val;
OnPropertyChanged("RunAfter");
}
else
{
_runAfter = 0;
Dispatcher.CurrentDispatcher.BeginInvoke(
new Action<String>(OnPropertyChanged),
DispatcherPriority.DataBind, "RunAfter");
}
}
}
Обновление:
Еще одна вещь, которую я заметил, это то, что Binding
на вашем TextBox
использует значение по умолчанию UpdateSourceTrigger
, которое происходит, когда TextBox
теряет фокус. Вы не увидите, что текст снова изменится на 0, пока TextBox
не потеряет фокус в этом режиме. Если вы измените его на PropertyChanged
, вы увидите, что это произойдет немедленно. В противном случае ваше свойство не будет установлено, пока ваш TextBox
не потеряет фокус:
<TextBox Name="txtRunAfter" Grid.Column="4" Text="{Binding RunAfter, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource TestStepTextBox}"/>