gpt4 book ai didi

将多个结果转换为逗号分隔字符串的 WPF XPath 绑定(bind)

转载 作者:数据小太阳 更新时间:2023-10-29 02:13:29 26 4
gpt4 key购买 nike

我有一个结构类似于以下内容的 XML 文件:


<Parent><br/>
<Child>5</Child><br/>
<Child>3</Child><br/>
<Child>5</Child><br/>
<Child>1</Child><br/>
</Parent>

在我的 XAML 中,我有一个绑定(bind)到 XML 文件的 ListView,并已将 ListViewItem 的 DataTemplate 设置为绑定(bind)如下:

<TextBlock Text="{Binding XPath=Parent/Child}"/>

显然,对于此 XPath 查询,我期望得到 4 个结果,但我似乎找不到将结果转换为逗号分隔字符串的方法,而现在,TextBlock 仅显示第一个值。

如果我使用相同的 XPath 查询来设置 ListBox 的 ItemsSource,我会在 ListBox 中获得所有结果,所以我认为我应该能够获得传递给 Converter 类的所有值...

最佳答案

没有办法让返回多个节点(例如您的节点)的 XPath 查询为您将它们聚合成一个值。正在发生的事情是返回一个节点集,并且由于您绑定(bind)到单个字符串属性,基础架构只是通过从集合中获取第一个节点然后获取其@text 节点来强制该节点集。

老实说,我自己还没有尝试过,目前也没有时间,但我希望它能起作用的唯一方法是编写自定义 IValueConverter。我假设它将传递一个 XmlNodeList 作为要转换的值,然后您可以枚举这些节点并自己连接一个逗号分隔的字符串。

更新

由于 XPath 引擎执行预强制转换,因此 IValueConverter 建议不起作用,因此我建议您这样做:不要绑定(bind)到单个 TextBlock,而是绑定(bind)到 ItemsControl 并将 ItemsControl 的 ItemTemplate 定义为如下:

<DataTemplate>
<TextBlock Text="{Binding}"/>,
</DataTemplate>

注意:老实说,我在 DataTemplate 中采用了惰性方法,即使现在在最后一项之后,您也会以逗号结尾。也就是说,您应该能够定义一个带有触发器的 DataTemplate,该触发器确定它是最后一项并且不显示逗号。

最后,根据您希望数据布局的方式,还可以设置 ItemsControl 的 ItemsPanel。我假设您想要水平流动并在此处环绕:

<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>

关于将多个结果转换为逗号分隔字符串的 WPF XPath 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1626352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com