【问题标题】:Visual Studio reports a binding error, even though binding is workingVisual Studio 报告绑定错误,即使绑定正在工作
【发布时间】:2010-11-04 11:13:03
【问题描述】:

在我的项目中,我绑定到一个 XML 文件。有几种绑定:一个绑定到 textBox,一个绑定到列表,一个绑定到 UserControl。除了 UserControl 之外的所有东西都可以工作,但是在输出中我得到了所有 3 个绑定而不是 2 个的错误。

错误如下所示:

System.Windows.Data 错误:43: 带有 XPath 的 BindingExpression 不能 绑定到非 XML 对象。 XPath='/datlg/@timeStamp' BindingExpression:Path=/InnerText; DataItem='XmlDataCollection' (哈希码=199777);目标元素是 '文本块'(名称='');目标属性 是“文本”(输入“字符串”) XmlDataCollection:'MS.Internal.Data.XmlDataCollection'

我的 textBlock 看起来是这样的:

<TextBlock Margin="0" 
           Text="{Binding XPath=/datlg/@timeStamp}" 
           TextWrapping="Wrap"/>

这是用户控件的代码:

string xPath = String.Format("datlg/Devl/dev[@id='{0}']", id);
((XmlDataProvider)this.DataContext).XPath = xPath;
Binding b = new Binding();
b.Source = (XmlDataProvider)this.DataContext;
b.XPath = "prml/prm[@id='1']";
//b.Converter = (IValueConverter)this.Resources["IntToBoolConverter"];
b.Mode = BindingMode.OneWay;
//this.SetBinding(VacuumPumpControl.IsPoweredOnProperty, b);
testBox.SetBinding(TextBlock.TextProperty, b);

注意:出于测试目的,我暂时将数据绑定到 textBox 以查看绑定是否有效(例如,XPath 是否设置为正确的,等等)。如果绑定到 textBox 就可以了,但是绑定到 DP 就不行了。

注释行是不起作用的行。

由于所有(工作和不工作)绑定都会出错,因此很难找出我的用户控件绑定不工作的原因。

任何想法为什么所有绑定都会出错以及为什么在 UserControl 中绑定到 DP 不起作用?

【问题讨论】:

    标签: c# wpf xml data-binding xpath


    【解决方案1】:

    错误可能仅仅是由于延迟加载造成的。看到瞬态数据绑定错误是很常见的。您可以尝试添加此代码以启用该特定绑定的详细绑定信息:

    PresentationTraceSources.SetTraceLevel(b, PresentationTraceLevel.High);
    

    在调用 SetBinding 之前添加它。尝试单步执行代码。如果您在调用 SetBinding 时看到您描述的错误消息,然后按 F5,您会看到加载更多绑定消息,特别是如果它包含来自 XmlDataProvider 的 DataChanged 事件,那么这几乎可以肯定是原因。

    如果您真的不想看到这些暂时性错误,则需要在 XmlDataProvider 完成数据加载后创建这些绑定。

    至于绑定失败,如果不查看所有代码很难确定,但可能归结为类型不匹配。如果您的 IntToBoolConverter 真的需要一个整数,那么它会感到失望 - XML 数据源总是以字符串的形式提供值。你的转换器是什么样的?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多