2013-07-24 11 views
2

У меня есть приложение и окно настроек с TabControl, содержащее пару TabItems. Каждый из них имеет некоторые поля (текстовые поля), которые привязываются к одному и тому же объекту Singleton.
Есть ли какой-либо элегантный и подобный WPF способ привязки данных только после нажатия кнопки «Сохранить»?
В настоящее время он привязан к базе данных сразу после изменения содержимого текстового поля, и я хочу, чтобы этот синглтон имел старые значения и обновлял их только после нажатия кнопки сохранения.WPF привязка данных после нажатия кнопки «Сохранить»

ответ

2

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

Для этого: Привязать к свойствам, отличным от одноэлементного (как вы хотите сохранить старые настройки до тех пор, пока не будет нажата кнопка «Сохранить») - без уведомления о повышении для этих свойств.

В вашей кнопке сохранения задайте свойства singleton, а затем поднимите все уведомления о других свойствах.

В вашей кнопке отмены установите другие свойства в значениях свойств одиночного элемента и поднимите все уведомления.

Не забудьте указать свойства свойства singleton при первом загрузке представления и поднять все уведомления (как и отменить).

0

Если вы используете WPF, измените UpdateSourceTrigger на LostFocus. Я думаю, что это решит цель.

Text="{Binding Path=MyText, UpdateSourceTrigger=LostFocus, Mode=TwoWay}" 
3

Для вашего DataBinding объекта, используемого в XAML для Textbox, используйте свойство UpdateSourceTrigger со значением Explicit, как показано ниже:

<TextBox Name="itemNameTextBox" 
    Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" /> 

При установке значения UpdateSourceTrigger в Явное, значение источника только изменяется, когда приложение вызывает метод UpdateSource, как показано ниже (вы можете поставить ниже код в Save Click event):

BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty); 
be.UpdateSource();