Я связываю текстовые поля с данными XML, используя XPath и UpdateSourceTrigger = Explicit. Это прекрасно работает, когда XPath-оператор прост, например:
<TextBox Grid.Column="1" Grid.Row="2" Text="{Binding XPath=Length, UpdateSourceTrigger=Explicit}" />
В TextBox отображается правильное значение из данных XML. Поскольку я не хочу, чтобы изменения в TextBox были мгновенно синхронизированы с данными XML, я использую явную UpdateSourceTrigger и кнопку «Применить». При нажатии на кнопку исполняется следующий код:
BindingExpression be = tb.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
"tb" - это TextBox (я зацикливаю список текстовых полей).
Это все работает хорошо. Проблема в том, что XPath немного сложнее. У меня есть данные XML, которые выглядят так:
<Tags>
<Tag TagType="1">
<Name>122</Name>
<Offset>1212</Offset>
</Tag>
<Tag TagType="2">
<Name />
<Offset />
</Tag>
</Tags>
Чтобы связать TextBox с первым тегом, оператор XPath выглядит следующим образом
XPath='Tags/Tag[@TagType=1]/Name'
Странная часть в том, что TextBox заполнен значением "122", но обновить значение невозможно. При нажатии кнопки «Применить» это значение не «сохраняется обратно» в данные XML. Но если я удаляю опцию UpdateSourceTrigger из привязки, тогда данные сохраняются в XML. Однако данные постоянно обновляются, а это не то, чего я хочу.
Почему UpdateSourceTrigger = не работает явно, когда XPath более сложен, чем одно имя элемента? Любые идеи, как я могу это исправить?
С уважением,
Patrick