2010-11-04 72 views
0

在我的项目中,我绑定了一个XML文件。有几个绑定:一个到textBox,一个到一个列表,一个到一个UserControl。所有的用户控件行为以外,但在输出我得到错误的所有3个绑定,而不是2即使绑定正在工作,Visual Studio也会报告绑定错误

错误看起来是这样的:

System.Windows.Data Error: 43 : BindingExpression with XPath cannot bind to non-XML object.; XPath='/datlg/@timeStamp' BindingExpression:Path=/InnerText; DataItem='XmlDataCollection' (HashCode=199777); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String') XmlDataCollection:'MS.Internal.Data.XmlDataCollection'

我的文本块中查找此:

<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); 

e:用于测试目的我已将数据暂时绑定到textBox以查看绑定是否正在工作(例如,是XPath设置为正确的,等等)。如果它绑定到textBox,它会起作用,但如果它绑定到DP,则它不起作用。

评论行是不起作用的行。

并且所有(工作和不工作)绑定都会给出错误,这很难找出为什么我的用户控件的绑定不起作用。

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

回答

4

错误可能只是由于延迟加载。看到瞬时数据绑定错误是很常见的。你可以尝试添加该代码,以使该特定绑定详细绑定信息:

PresentationTraceSources.SetTraceLevel(b, PresentationTraceLevel.High); 

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

如果你真的不想看到这些瞬态错误,你需要在XmlDataProvider加载完数据后创建这些绑定。

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