XML 数据与命名空间的绑定

2024-01-12

我想使用 XML 文档的数据绑定来填充一个简单的表单,该表单显示有关人员列表的详细信息。我已经把一切都设置好了,现在就这样工作:

<Window x:Class="DataBindingSample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<Window.Resources>
    <XmlDataProvider x:Key="xmlProvider" XPath="People" Source="c:\someuri.xml"/>
</Window.Resources>
<Grid>        
    <ListBox Name="personList" ItemsSource="{Binding Source={StaticResource xmlProvider}, XPath=Person}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding XPath=Name}" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

    <GroupBox Header="GroupBox" Name="groupBox1" DataContext="{Binding ElementName=personList, Path=SelectedItem}">
        <Grid>
            <TextBox Name="nameText" Text="{Binding XPath=Name}"/>
            <ComboBox Name="genderCombo" Text="{Binding XPath=Gender}">
                <ComboBoxItem>Male</ComboBoxItem>
                <ComboBoxItem>Female</ComboBoxItem>
            </ComboBox>
        </Grid>
    </GroupBox>
</Grid>
</Window>

(为了清楚起见,所有位置/布局元素已被删除)

现在这效果很好!如果我向它提供一些与所提供的路径相匹配的 XML,我会在列表框中得到一个名称列表,单击时会在相应的字段中显示名称和性别。当我开始尝试在 XML 源中使用命名空间时,问题就出现了。然后,XAML 更改为如下所示:

<Window x:Class="DataBindingSample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<Window.Resources>
    <XmlNamespaceMappingCollection x:Key="namespaceMappings">
        <XmlNamespaceMapping Uri="http://www.mynamespace.com" Prefix="mns"/>
    </XmlNamespaceMappingCollection>
    <XmlDataProvider x:Key="xmlProvider" XmlNamespaceManager="{StaticResource namespaceMappings}" XPath="mns:People" Source="c:\someuriwithnamespaces.xml"/>
</Window.Resources>
<Grid>        
    <ListBox Name="personList" ItemsSource="{Binding Source={StaticResource xmlProvider}, XPath=mns:Person}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding XPath=mns:Name}" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

    <GroupBox Header="GroupBox" Name="groupBox1" DataContext="{Binding ElementName=personList, Path=SelectedItem}">
        <Grid>
            <TextBox Name="nameText" Text="{Binding XPath=mns:Name}"/>
            <ComboBox Name="genderCombo" Text="{Binding XPath=mns:Gender}">
                <ComboBoxItem>Male</ComboBoxItem>
                <ComboBoxItem>Female</ComboBoxItem>
            </ComboBox>
        </Grid>
    </GroupBox>
</Grid>
</Window>

使用此代码(当然还有适当的命名空间 xml),列表框仍然可以正确显示名称,但单击这些名称不再更新“名称”和“性别”字段!我怀疑 xml 命名空间以某种方式对 groupbox 的 DataContext 产生不利反应,但我不确定原因或方式。有谁知道如何在这种情况下使用 XML 命名空间?


I also 问了这个问题 http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/cb6b22e7-3a48-425b-bbad-2575d2618968/在 MSDN WPF 表单上。 Marco Zhou这样回答了我,这也是我最终寻求的答案。我在这里复制了它,以便任何寻找相同答案的人受益:

这有效:

    <XmlDataProvider x:Key="dataProvider"
                     XmlNamespaceManager="{StaticResource namespaceMappings}"
                     XPath="p:players/p:player">
        <x:XData>
            <p:players xmlns:p="http://www.footballism.com/2005/SoccerPlayers">
                <p:player>
                    <p:fullName>Sebastian Batistuta</p:fullName>
                    <p:age>26</p:age>
                </p:player>
                <p:player>
                    <p:fullName>Andriey Shevchenko</p:fullName>
                    <p:age>30</p:age>
                </p:player>
                <p:player>
                    <p:fullName>Paviel Nedved</p:fullName>
                    <p:age>21</p:age>
                </p:player>
                <p:player>
                    <p:fullName>David Beckham</p:fullName>
                    <p:age>19</p:age>
                </p:player>
            </p:players>
        </x:XData>
    </XmlDataProvider>
</Page.Resources>
<StackPanel>
    <TextBlock
        Text="{Binding XPath=p:fullName}"
        FontWeight="Bold"
        Binding.XmlNamespaceManager="{StaticResource namespaceMappings}"
        DataContext="{Binding ElementName=listBox, Path=SelectedItem}"/>
    <ListBox ItemsSource="{Binding Source={StaticResource dataProvider}}"
             x:Name="listBox"
             DisplayMemberPath="p:fullName">
    </ListBox>
</StackPanel> </Page>

我想看完代码后, 你应该能够理解为什么 它在指定后起作用 附加 Binding.XmlNamespaceManager TextBlock 的属性。

ListBox 是数据绑定到数据 具有 xml 命名空间的提供者 映射信息,但绑定 TextBlock 上没有这个 信息,这就是失败的原因。

实际上,在做主细节时 数据绑定,更合适的是 执行如下操作:

    <XmlDataProvider x:Key="dataProvider"
                     XmlNamespaceManager="{StaticResource namespaceMappings}"
                     XPath="p:players/p:player">
        <x:XData>
            <p:players xmlns:p="http://www.footballism.com/2005/SoccerPlayers">
                <p:player>
                    <p:fullName>Sebastian Batistuta</p:fullName>
                    <p:age>26</p:age>
                </p:player>
                <p:player>
                    <p:fullName>Andriey Shevchenko</p:fullName>
                    <p:age>30</p:age>
                </p:player>
                <p:player>
                    <p:fullName>Paviel Nedved</p:fullName>
                    <p:age>21</p:age>
                </p:player>
                <p:player>
                    <p:fullName>David Beckham</p:fullName>
                    <p:age>19</p:age>
                </p:player>
            </p:players>
        </x:XData>
    </XmlDataProvider>
</Page.Resources>
<StackPanel DataContext="{Binding Source={StaticResource dataProvider}}">
    <TextBlock
        Text="{Binding XPath=p:fullName}"
        FontWeight="Bold"/>
    <ListBox ItemsSource="{Binding}"
             x:Name="listBox"
             DisplayMemberPath="p:fullName"
             IsSynchronizedWithCurrentItem="True">
    </ListBox>
</StackPanel> </Page>

希望这能让事情澄清一点 少量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XML 数据与命名空间的绑定 的相关文章

  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include
  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 如何将 protobuf-net 与不可变值类型一起使用?

    假设我有一个像这样的不可变值类型 Serializable DataContract public struct MyValueType ISerializable private readonly int x private readon
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • 使用 C# 读取 Soap 消息

  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • Android:从正在运行的服务获取变量

    我的活动启动了一个服务 当我关闭我的应用程序时 该服务将继续运行 好吧 没错 但是 当我在活动中再次打开应用程序时 我需要知道在我之前启动的正在运行的服务 类 上定义的公共变量的值 我怎样才能做到这一点 Thanks 如果您将 Activi
  • iOS 5 Segue 实现

    在两个视图控制器之间实现 segue 时 如何使用 segue 对象更改目标视图控制器的属性 文档说这可以在prepareForSegue sender 方法中完成 我尝试过但没有成功 我不知道你是否还需要这个答案 但这是一个如此孤独的帖子
  • Rails3 rspec 问题

    我正在尝试rails3 我在用铁路教程 http railstutorial org 探索有关 Rails3 的更多信息的网站 该教程非常适合入门 我对rails2 的经验很少 我的 rspec 存在问题 目前阻碍了我的进度 我看到教程推荐
  • 获取 chrome 下载文件夹

    Windows 7 中的默认下载文件夹是c 用户 用户名 下载对于 Chrome 但可以通过设置将默认下载文件夹设置为其他文件夹 我需要找出哪个文件夹是下载文件夹 所以如果我将下载文件夹设置为c dd 那么我需要找出具体的文件夹 有没有办法
  • 如何在 chrome 中检查系统时间格式 - 在 JavaScript 中是 12 小时还是 24 小时?

    date toLocaleTimeString不适用于 Chrome 并且始终以 12 小时格式返回时间 我需要根据系统的时间格式显示时间 简短的回答是No您无法在浏览器中获取默认时间格式 因为它依赖于系统和浏览器设置 而 JavaScri
  • 如何将 CoreML 模型转换为 TensorFlow 模型?

    我了解到可以将 TensorFlow 模型 pb 文件转换为 CoreML mlmodel 以在 iOS 平台上运行 但我有一些想要在张量流上运行的 mlmodel 文件 所以我想知道是否有任何方法可以将它们转换为 pb 文件或任何其他方式
  • LINQ to Entities 用于减去 2 个日期

    我正在尝试使用 LINQ 和实体框架确定两个日期之间的天数 它告诉我它无法识别 System TimeSpan 类上的 Subtract 这是 LINQ 查询的 where 部分 where DateTime Now Subtract vi
  • 比 windows.h 的 Beep() 更快的替代方案

    我正在做一个个人项目 我想用旧的业余无线电无线电传输一些数据 我的第一份申请草案是这样的 我用 4 个 信号 构造一个字节 5000hz表示 00 6khz 表示 01 7khz的意思是 10 8khz的意思是 11 9khz 意思和上一个
  • 如何禁用 NetBeans 8.1 中烦人的警告/提示

    我正在 NetBeans 中使用 Java 和 Jersey 我的所有端点都标有以下提示 将方法转换为异步 这个提示确实污染了我通常寻找代码更改 错误的右侧排水沟 首选项 gt 编辑器 gt 提示中没有任何内容似乎会影响此提示 Cheers
  • Git 与 --squash 合并,同时保留每次提交的日志

    初始场景 A master B C D development 合并后我想要什么 squash A E master development B C D 在树枝上master git log将会 commit E Squashed comm
  • php:编写 .ics (iCal) 文件?日期格式?

    我不是一个 php 专家 在格式化 ics 文件的日期时遇到了麻烦 所以我有一个循环为每个生成一个日历条目 post 在我的例子中 post 是一个事件 foreach posts as post setup postdata post i
  • 从 Windows 的 git bash 激活 pyenv

    我在 Windows 7 64 位 上使用 gitbash 我尝试使用 python 3 4 的内置 venv 模块创建一个 venv 方法是调用python m venv venv 并且创建成功 但是生成的 venv 不包含 bash a
  • AVPlayerLayer 不显示 AVPlayer 视频?

    让 AVPlayer 视频内容显示在自己的视图中的技巧是什么 我们正在使用以下 AVPlayer 代码 但屏幕上没有出现任何内容 我们知道视频在那里 因为我们能够使用 MPMoviePlayerController 来显示它 这是我们正在使
  • 如何通过C#代码在文本框中向下滚动

    我正在使用 winforms 并且偶尔更新一个文本框 显示消息 但是 当文本到达框的末尾时 它会产生滚动条 我不知道如何向下滚动到底部 我唯一看到的是 ScrollToCaret 但插入符位于文本的开头 滚动的命令是什么 您可以通过使用名为
  • 将 ASP.NET 4 Web 应用程序部署到 IIS6 服务器后,工作进程回收导致其大部分时间停止工作

    这是一个非常奇怪的情况 所以希望我能很好地解释它 我正在将 ASP NET 4 Webforms 应用程序部署到运行 IIS6 的 Windows Server 2003 SP2 服务器 问题是 当应用程序池回收其工作进程 w3wp exe
  • python中二维数组操作的高效并行化

    我正在尝试使用二维数组上的并行操作joblibpython 中的库 这是我的代码 from joblib import Parallel delayed import multiprocessing import numpy as np T
  • 初始化静态库中嵌入的qt资源

    我有下一种情况 我需要在独立静态库中创建小部件 然后将其与最终应用程序 Visual C 9 0 qt 4 5 链接 这个静态小部件库包含一些资源 图标 并由多个 cpp 文件组成 每个文件都包含独立的小部件 据我所知 如果我在静态库中使用
  • 如何使用 Fabric.js 设置对比度和饱和度

    我想在图像编辑器中设置对比度 饱和度和色调 为此 我使用fabric js 但它只有亮度选项 这是我的 Fabric JS 代码 function fabric Object prototype transparentCorners fal
  • 如何有效地将用户添加到 GitLab 中的所有项目(以编程方式或其他方式)

    我有一个包含许多项目的 GitLab CE 服务器 我想向所有项目添加用户 如果可能的话 我希望避免通过 UI 项目 gt 设置 gt 成员 gt 将用户添加到项目 来执行此操作 因为这将花费大量时间 实现此目的的一种方法是将所有项目移至一
  • XML 数据与命名空间的绑定

    我想使用 XML 文档的数据绑定来填充一个简单的表单 该表单显示有关人员列表的详细信息 我已经把一切都设置好了 现在就这样工作