0

有人可以解释和更正以下 XAML 给定的XML文件来定义ComboBox ItemsSource吗?

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>
4

1 回答 1

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 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>
于 2013-01-22T17:47:08.153 回答