【问题标题】:Defining DataContext定义数据上下文
【发布时间】:2013-01-06 00:27:48
【问题描述】:

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

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>

【问题讨论】:

    标签: wpf user-interface data-binding mvvm combobox


    【解决方案1】:

    您不一定需要在 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>
    

    【讨论】:

    • ItemsSource 属性的 XPath 中前面的斜线的用途是什么?
    • 它选择该类型的节点,无论它们在树中的什么位置。由于 ComboItems 在 DBConnection 下,您可以使用它或指定“DBConnection/ComboItem”作为查询
    • 这是一个关于 XPath 语法的有用资源w3schools.com/xpath/xpath_syntax.asp
    猜你喜欢
    • 2018-09-05
    • 2014-02-25
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 2010-12-10
    • 2016-04-28
    • 1970-01-01
    相关资源
    最近更新 更多