Связывание при использовании XPath и UpdateSourceTrigger = Explicit - PullRequest
1 голос
/ 04 января 2012

Я связываю текстовые поля с данными 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...