Не уверен, что я точно следую тому, что вы описали, но я думаю, что проблема в том, что свойство, к которому вы привязали текстовое поле, не обновляется до тех пор, пока TextChanged не будет запущен в текстовом поле, и это делается в первую очередь, когда вы покидаете текстовое поле, в основном, он потеряет Фокус, если вы нажмете где-то еще.
Существует простой обходной путь для этого и его поведения.Сделав небольшое поведение, вы можете заставить текстовое поле обновлять привязку при каждом нажатии клавиши, чтобы все обновлялось, пока вы печатаете, и клавиатура все еще там.
Поведение:
/// <summary>
/// Update property on every keystroke in a textbox
/// </summary>
public class UpdateTextSourceTriggerBehavior : Behavior<TextBox>
{
protected override void OnAttached()
{
this.AssociatedObject.TextChanged += OnTextBoxTextChanged;
}
void OnTextBoxTextChanged(object sender, TextChangedEventArgs e)
{
var bindingExpression = AssociatedObject.ReadLocalValue(TextBox.TextProperty) as BindingExpression;
if (bindingExpression != null)
{
bindingExpression.UpdateSource();
}
}
protected override void OnDetaching()
{
this.AssociatedObject.TextChanged -= OnTextBoxTextChanged;
}
}
Теперь простоприкрепите это поведение к вашему текстовому полю следующим образом:
<TextBox Text="{Binding YourPropertyName, Mode=TwoWay}">
<i:Interaction.Behaviors>
<UpdateTextSourceTriggerBehavior/>
</i:Interaction.Behaviors>
</TextBox>
Это будет постоянно обновлять свойство вашей модели представления, так что при нажатии на сохранить сразу после ввода в текстовое поле будет сохранено правильное значение,Надеюсь, это поможет!
Ура, Андерс