使用XPath和UpdateSourceTrigger = Explicit时绑定

时间:2012-01-04 16:22:21

标签: c# wpf xml binding xpath

我使用XPath和UpdateSourceTrigger = Explicit将文本框绑定到XML数据。当XPath语句很简单时,这非常有用,例如:

<TextBox Grid.Column="1" Grid.Row="2" Text="{Binding XPath=Length, UpdateSourceTrigger=Explicit}" />

XML数据中的正确值显示在TextBox中。由于我不希望TextBox中的更改立即与XML数据同步,因此我使用显式UpdateSourceTrigger和“Apply”按钮。单击该按钮时,将执行以下代码:

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与第一个Tag绑定,XPath语句将如下所示

XPath='Tags/Tag[@TagType=1]/Name'

现在奇怪的部分是TextBox填充了值“122”,但是无法更新值。单击“应用”按钮时,该值不会“保存回”到XML数据中。但是,如果我从绑定中删除UpdateSourceTrigger选项,则将数据保存到XML。然而,数据不断更新,这不是我想要的。

为什么UpdateSourceTrigger =当XPath比单个元素名称更复杂时,显式工作?我有什么想法可以解决这个问题吗?

此致 帕特里克

0 个答案:

没有答案