C# WPF:使用路径筛选将自定义集合(列表)数据绑定到列表框
我创建了一个自定义DataSourceProvider,它提供一个列表作为查询结果 通过使用Path参数,生成的Listbox应该包含XmlNode中指定的属性列表 Path=Tag应使用列表中包含的标记填充列表框。但是它用第一个列表项标记填充列表 问题是为什么Path参数不检索列表中的所有标记元素,而只检索第一个列表元素标记中的字母 自定义列表作为资源提供:C# WPF:使用路径筛选将自定义集合(列表)数据绑定到列表框,c#,wpf,listbox,dataprovider,C#,Wpf,Listbox,Dataprovider,我创建了一个自定义DataSourceProvider,它提供一个列表作为查询结果 通过使用Path参数,生成的Listbox应该包含XmlNode中指定的属性列表 Path=Tag应使用列表中包含的标记填充列表框。但是它用第一个列表项标记填充列表 问题是为什么Path参数不检索列表中的所有标记元素,而只检索第一个列表元素标记中的字母 自定义列表作为资源提供: <Window.Resources> <classes:Custom_XmlProvider x:Key="
<Window.Resources>
<classes:Custom_XmlProvider x:Key="txtProvider" Path="name" />
</Window.Resources>
XmlNode定义为:
public class XmlNode
{
public string Tag { get; set; }
public string Type { get; set; }
public string InnerText { get; set; }
public int FileNumber { get; set; }
public int NodeDepth { get; set; }
public int IndexNumber { get; set; }
}
这是列表中的第一个元素:
结果列表在窗口中显示如下:
上面的列表应该包含标记元素的列表,我无法正确理解为什么Path参数不收集列表中的正确元素,而是提供第一个列表元素标记名的列表。通常绑定到ItemsSource的是包含一些元素集合的属性。您已经绑定了一个字符串属性标记,而字符串恰好是字符的集合。这就是为什么每个列表项都包含foodlist的单个字符,WPF非常乐意将此绑定解释为FirstOrDefault。绑定的错误在于路径应该是空的。然后在你的标签上,它是空的,应该是标签
我只是喜欢它,当无知的低效被简单本身解决的时候。唯一的问题是你感觉自己很愚蠢:非常感谢。让我困惑的是,原始代码绑定的是Path=,这给了我一个XmlNode元素列表。
protected override void BeginQuery()
{
System.Threading.ThreadPool.QueueUserWorkItem(RunQuery, null);
}
private void RunQuery(object state)
{
base.BeginQuery();
try
{
//TODO - do something with the NodeList
c_pData = c_thisXmlParser.NodeList;
OnQueryFinished(c_pData, null, null, c_pData);
}
catch
{
OnQueryFinished(null, null, null, null);
}
}
public class XmlNode
{
public string Tag { get; set; }
public string Type { get; set; }
public string InnerText { get; set; }
public int FileNumber { get; set; }
public int NodeDepth { get; set; }
public int IndexNumber { get; set; }
}
<ListBox Grid.Row="1" ItemsSource="{Binding, Source={ StaticResource txtProvider}}"
DockPanel.Dock="Bottom">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Label Content="{Binding Path=Tag}" FontFamily="Arial" FontWeight="Normal" Margin="5,0,0,0"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>