我创建了一个自定义DataSourceProvider,它提供List<XmlNode>
作为查询结果。
通过使用Path参数,生成的Listbox应包含在XmlNode中指定的属性的指定列表
Path = Tag应使用List中包含的Tag填充列表框。但相反,它会使用第一个List-items标记填充列表。
问题是为什么Path参数不会从List中检索所有Tag元素,而只会从第一个列表元素Tag中删除字母。
自定义列表作为资源提供:
<Window.Resources>
<classes:Custom_XmlProvider x:Key="txtProvider" Path="name" />
</Window.Resources>
ListBox使用Path = Tag绑定到资源:
<ListBox Grid.Row="1" ItemsSource="{Binding Path=Tag, Source={ StaticResource txtProvider}}"
DockPanel.Dock="Bottom">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Label Content="{Binding}" FontFamily="Arial" FontWeight="Normal" Margin="5,0,0,0"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
自定义DataSourceProvider返回包含1200个对象的List:
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);
}
}
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; }
}
这是列表中的第一个元素:
,结果列表在窗口中显示如下:
上面的列表应该包含Tag元素列表,我无法正确理解为什么Path参数不收集List的正确元素,而是提供第一个list-elements标记名称的列表
答案 0 :(得分:1)
您通常绑定到ItemsSource
的属性是包含一些元素集合的属性。绑定属性Tag
是字符串,字符串恰好是字符集合。这就是每个列表项包含foodlist
的单个字符的原因,WPF非常乐意将此绑定解释为FirstOrDefault
。你的绑定有什么问题是Path
应该是空的。然后在您的标签中,它是空的,应该是Tag
。
<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>