Другое решение состоит в создании ассоциативного массива с форматом даты и последующим переформатированием данных.
Этот метод полезен для даты, отформатированной беспорядочным способом.
Пример:
mydate='01.02.12 10:20:43':
myformat='dd/mm/yy HH:MM:ss';
dtsplit=mydate.split(/[\/ .:]/);
dfsplit=myformat.split(/[\/ .:]/);
// creates assoc array for date
df = new Array();
for(dc=0;dc<6;dc++) {
df[dfsplit[dc]]=dtsplit[dc];
}
// uses assc array for standard mysql format
dstring[r] = '20'+df['yy']+'-'+df['mm']+'-'+df['dd'];
dstring[r] += ' '+df['HH']+':'+df['MM']+':'+df['ss'];
предположим у Вас есть TextBox в окне и ToolBar с кнопкой Save в нем. Предположите, что свойство TextBox’s Text связывается со свойством на бизнес-объекте, и свойство binding’s UpdateSourceTrigger установлено на значение по умолчанию LostFocus, означая, что связанное значение пододвинуто обратно к свойству бизнес-объекта, когда TextBox теряет фокус ввода. Кроме того, предположите, что кнопка ToolBar’s Save имеет свой набор свойств Команды к ApplicationCommands. Команда Save.
В той ситуации, если Вы редактируете TextBox и нажимаете кнопку Save с мышью, существует проблема. При нажатии на Button в ToolBar TextBox не теряет фокус. Так как событие TextBox’s LostFocus не стреляет, текстовая привязка свойства не обновляет исходное свойство бизнес-объекта.
, Очевидно, Вы не должны проверять и сохранять объект, если последний раз отредактированное значение в UI еще не было продвинуто в объект. Это - точная проблема, которую Karl работал вокруг путем записи кода в его окне, которое вручную искало TextBox с фокусом и обновило источник привязки данных. Его решение хорошо работало, но это получило меня думающий об универсальном решении, которое также будет полезно за пределами этого конкретного сценария. Введите CommandGroup†¦
, Взятый из статьи Smith’s CodeProject Josh [приблизительно 110] CommandGroup
Вы попытались установить UpdateSourceTrigger на PropertyChanged? С другой стороны, Вы могли назвать UpdateSOurce () методом, но это походит на небольшое излишество и побеждает цель привязки данных TwoWay.
Это - УЖАСНЫЙ взлом, но должно также работать
TextBox focusedTextBox = Keyboard.FocusedElement as TextBox;
if (focusedTextBox != null)
{
focusedTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
}
Этот код проверки, если TextBox фокусируется... Если 1 найден... обновляют обязательный источник!
Вы могли установить фокус где-то в другом месте непосредственно перед сохранением?
можно сделать это путем вызова фокуса () на элементе UI.
Вы могли сфокусироваться на любом элементе, вызывает "сохранение". Если Вашим триггером является LostFocus тогда, необходимо переместить фокус куда-нибудь. Сохраните имеет преимущество, что оно не изменяется и имело бы смысл пользователю.
В исследовании этого для ответа на него я немного смущен, что поведение, которое Вы видите, происходит, конечно, действие нажатия на меню File или что имеет Вас, должен не сфокусировать текстовое поле и установить его на меню?
Самый легкий путь к , устанавливает фокус где-нибудь .
можно сразу задержать фокус, но установка фокуса где угодно инициирует LostFocus-событие на любой тип управления и заставит его обновить свой материал:
IInputElement x = System.Windows.Input.Keyboard.FocusedElement;
DummyField.Focus();
x.Focus();
Иначе должен был бы получить сфокусированный элемент, получить обязательный элемент от сфокусированного элемента и инициировать обновление вручную. Пример для TextBox и ComboBox (необходимо было бы добавить любое управление, вводит Вас, должен поддерживать):
TextBox t = Keyboard.FocusedElement as TextBox;
if ((t != null) && (t.GetBindingExpression(TextBox.TextProperty) != null))
t.GetBindingExpression(TextBox.TextProperty).UpdateSource();
ComboBox c = Keyboard.FocusedElement as ComboBox;
if ((c != null) && (c.GetBindingExpression(ComboBox.TextProperty) != null))
c.GetBindingExpression(ComboBox.TextProperty).UpdateSource();
Я обнаружил, что удаление элементов меню, область действия которых зависит от FocusScope меню, приводит к правильной потере фокуса текстовым полем. Я не думаю, что это применимо ко ВСЕМ пунктам меню, но определенно для действия сохранения или подтверждения.
<Menu FocusManager.IsFocusScope="False" >