2010-12-27 2 views
2

В форме у меня есть TextBox, привязывающий объект к свойству-члену «Заголовок». Наряду с этим кнопка «Сохранить» проверяет привязку.C# Как зафиксировать TextBox?

Похоже, что базовое свойство объекта не обновляется, если текстовое поле не теряет фокус. Но нет формы.ActiveControl.Blur() для использования. Кроме того, это не похоже на звук.

В любом случае, чтобы сделать это лучше? Благодарю.

EDIT: Извините, что не ясны. Мой вопрос находится в заголовке: «Как зафиксировать текстовое поле». Я использую термин «фиксация» из фиксации DataGridView и фиксации BindingSource. И это в WinForms. (Никогда не работал с WPF, поэтому мне это не приходило. Извините).

Фактический сценарий, который у меня есть, у меня есть куча TextBox, привязанная к свойству одного объекта. Пользователь вводит значения во всем TextBox, и когда пользователь нажимает кнопку сохранения (кнопка на панели инструментов), последний TextBox все еще находится в фокусе (или в режиме редактирования), поэтому сохранение не будет отображать последнее значение в последнем текстовом поле.

Я хочу найти правильный способ «зафиксировать» значение текстового поля непосредственно перед сохранением.

Спасибо.

+4

Это WinForms или WPF? –

+0

Что будет делать метод «Blur»? Непонятно, что вы здесь просите. * Что-то * всегда должно быть в центре внимания. Вы просто хотите узнать, как изменить фокус с текстового поля на другой элемент управления в вашей форме? –

+0

, пожалуйста, уточните, что вы действительно хотите здесь сделать –

ответ

1

Поскольку вопрос был обновлен, чтобы указать, что это WinForms, вам нужно обрабатывать вещи немного иначе, чем если бы это было приложение WPF. К счастью, оказалось, что решение очень простое.

Всякий раз, когда пользователь нажимает на кнопку «Сохранить» (так, например, в обработчике Click событий вашей кнопку Сохранить в), вам нужно вызвать метод EndEdit на вашем BindingSource. Это приведет к тому, что все ожидающие изменения будут привязаны к базовому источнику данных, именно то, что вы надеялись выполнить.

Также см. relevant documentation на MSDN для получения более подробной информации.

+1

Спасибо за подсказку, Коди. Я использую BindlingList вместо BindingSource (потому что BindSource принадлежит пространству имен Forms, и я не хочу загрязнять этот уровень логики), и с вашей помощью мне удалось найти функцию this.ActiveControl.DataBindings ["Text"] .WriteValue(); – Jake

+0

@ Джейк: Это имеет смысл. Сразу после того, как я опубликовал это, я понял, что делаю предположение, что вы используете 'BindingSource'. В вашем вопросе фактически не указано, как вы обрабатываете привязку данных. Я рад, что вам удалось найти нужное вам решение. –

2

Похоже, WPF с описанием проблемы ..

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

<TextBox Text="{Binding UpdateSourceTrigger=PropertyChanged}"/> 
+0

Спасибо Bubblewrap. Похоже, это не имеет значения, если это WPF. Архитектура похожа. Пожалуйста, см. Мой отредактированный пост для деталей. Для вашей помощи. – Jake