Заставить WPF зафиксировать изменения для сфокусированного элемента - PullRequest
7 голосов
/ 15 апреля 2010

Я работаю с VS2010, WPF и EF. Я поместил элементы управления в свое окно, перетащив объект из окна инструментов Источники данных. Я использовал настройку «детали», чтобы моя сущность была представлена ​​несколькими метками и текстовыми полями. Я также добавил кнопку со следующим кодом:

_context.SaveChanges();

Когда я редактирую данные, изменения в любом текстовом поле, в котором есть фокус, не передаются обратно в БД. Все остальное совершается просто отлично. Если я переместил фокус на другой элемент до нажатия кнопки «Сохранить», он также фиксируется. Я испытал то же самое с DataGrid.

Я знаю, что упускаю что-то простое, но я могу понять это. Есть идеи о том, что мне не хватает?

Спасибо!

Ответы [ 2 ]

12 голосов
/ 15 апреля 2010

Это потому, что привязка TextBox по умолчанию UpdateSourceTrigger - LostFocus. Если вы измените все свои привязки, чтобы установить для него значение PropertyChanged, оно будет работать так, как вы ожидаете:

<TextBox Text="{Binding SomeProperty, UpdateSourceTrigger=PropertyChanged}" />
3 голосов
/ 10 октября 2012

Я только что столкнулся с этой же проблемой, когда пытался программно установить значение TextBox с привязкой к данным, но предложение Абэ не сработало для нашей настройки (оно вызывало некоторую ошибочную проверку).

Вот как я заставил это работать:

TextBox tb = (TextBox)this.FindName("TargetTextBox");
tb.Text = "1234";
tb.GetBindingExpression(TextBox.TextProperty).UpdateSource();
...