Привязка данных WPF перед сохранением

Другое решение состоит в создании ассоциативного массива с форматом даты и последующим переформатированием данных.

Этот метод полезен для даты, отформатированной беспорядочным способом.

Пример:

    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'];
37
задан Spook 29 May 2014 в 06:40
поделиться

7 ответов

предположим у Вас есть 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

6
ответ дан rudigrobler 27 November 2019 в 04:47
поделиться

Вы попытались установить UpdateSourceTrigger на PropertyChanged? С другой стороны, Вы могли назвать UpdateSOurce () методом, но это походит на небольшое излишество и побеждает цель привязки данных TwoWay.

2
ответ дан palehorse 27 November 2019 в 04:47
поделиться

Это - УЖАСНЫЙ взлом, но должно также работать

TextBox focusedTextBox = Keyboard.FocusedElement as TextBox;
if (focusedTextBox != null)
{
    focusedTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
}

Этот код проверки, если TextBox фокусируется... Если 1 найден... обновляют обязательный источник!

7
ответ дан rudigrobler 27 November 2019 в 04:47
поделиться

Вы могли установить фокус где-то в другом месте непосредственно перед сохранением?

можно сделать это путем вызова фокуса () на элементе UI.

Вы могли сфокусироваться на любом элементе, вызывает "сохранение". Если Вашим триггером является LostFocus тогда, необходимо переместить фокус куда-нибудь. Сохраните имеет преимущество, что оно не изменяется и имело бы смысл пользователю.

1
ответ дан dmo 27 November 2019 в 04:47
поделиться

В исследовании этого для ответа на него я немного смущен, что поведение, которое Вы видите, происходит, конечно, действие нажатия на меню File или что имеет Вас, должен не сфокусировать текстовое поле и установить его на меню?

0
ответ дан Nidonocu 27 November 2019 в 04:47
поделиться

Самый легкий путь к , устанавливает фокус где-нибудь .
можно сразу задержать фокус, но установка фокуса где угодно инициирует 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();
0
ответ дан Sam 27 November 2019 в 04:47
поделиться

Я обнаружил, что удаление элементов меню, область действия которых зависит от FocusScope меню, приводит к правильной потере фокуса текстовым полем. Я не думаю, что это применимо ко ВСЕМ пунктам меню, но определенно для действия сохранения или подтверждения.

<Menu FocusManager.IsFocusScope="False" >
23
ответ дан 27 November 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: