2010-11-04 28 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數據源總是以字符串的形式提供值。你的轉換器是什麼樣的?