2013-01-22 38 views
0

是否可以解釋並更正下列給定XML文件的XAML以定義ComboBox ItemsSource定義DataContext

XAML:

<ComboBox Name="cbConnection" DataContext="{Binding Source=c:\temp\ConnectionList.xml, XPath=DBConnection}" ItemsSource="{Binding XPath=ComboItem}" DisplayMemberPath="Key" SelectedValuePath="Value"> 

C:\ TEMP \ ConnectionList.xml:

<?xml version="1.0" encoding="utf-8" ?>  
<DBConnection> 
<ComboItem> 
    <Key>Computer-A</Key> 
    <Value>Server=COMPA;Database=MyDB;Integrated Security=SSPI;</Value> 
</ComboItem> 
<ComboItem> 
    <Key>Computer-B</Key> 
    <Value>Server=COMPB\SQL2012STD;Database=MyDB;Integrated Security=SSPI;</Value> 
</ComboItem> 
</DBConnection> 

回答

3

你不一定需要用的DataContext鬼混。只需適當地設置ItemsSource即可。

  1. 設置一個XMLDataProvider,並將它讀取XML文件 和其他WPF元素提供數據。 ItemsSource應該指向這個提供者。
  2. 將結束標記添加到您的XML中
  3. 修復您的XPath查詢以查詢名爲ComboItem的所有節點,而不僅僅是頂級。

這裏是XMLDataProvider,把這個資源字典在你的頁面:

<XmlDataProvider x:Key="XmlData" 
       Source="c:\temp\ConnectionList.xml"> 
</XmlDataProvider> 

以下是更正後的ComboBox:

<ComboBox x:Name="cbConnection" 
      ItemsSource="{Binding Source={StaticResource XmlData}, XPath=//ComboItem}" 
      DisplayMemberPath="Key" 
      SelectedValuePath="Value" /> 

以下是更正XML:

<?xml version="1.0" encoding="utf-8" ?>  
<DBConnection> 
    <ComboItem> 
     <Key>Computer-A</Key> 
     <Value>Server=COMPA;Database=MyDB;Integrated Security=SSPI;</Value> 
    </ComboItem> 
    <ComboItem> 
     <Key>Computer-B</Key> 
     <Value>Server=COMPB\SQL2012STD;Database=MyDB;Integrated Security=SSPI;</Value> 
    </ComboItem> 
</DBConnection> 
+0

在ItemsSo的XPath中,前面斜線的用途是什麼urce屬性? – sammarcow

+1

它選擇該類型的節點,而不管它們在樹中的哪個位置。由於ComboItems在DBConnection下,因此您可以使用它或指定「DBConnection/ComboItem」作爲查詢 –

+1

以下是有關XPath語法的資源 http://www.w3schools.com/xpath/xpath_syntax.asp –