Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:使用路径筛选将自定义集合(列表)数据绑定到列表框_C#_Wpf_Listbox_Dataprovider - Fatal编程技术网

C# WPF:使用路径筛选将自定义集合(列表)数据绑定到列表框

C# WPF:使用路径筛选将自定义集合(列表)数据绑定到列表框,c#,wpf,listbox,dataprovider,C#,Wpf,Listbox,Dataprovider,我创建了一个自定义DataSourceProvider,它提供一个列表作为查询结果 通过使用Path参数,生成的Listbox应该包含XmlNode中指定的属性列表 Path=Tag应使用列表中包含的标记填充列表框。但是它用第一个列表项标记填充列表 问题是为什么Path参数不检索列表中的所有标记元素,而只检索第一个列表元素标记中的字母 自定义列表作为资源提供: <Window.Resources> <classes:Custom_XmlProvider x:Key="

我创建了一个自定义DataSourceProvider,它提供一个列表作为查询结果

通过使用Path参数,生成的Listbox应该包含XmlNode中指定的属性列表

Path=Tag应使用列表中包含的标记填充列表框。但是它用第一个列表项标记填充列表

问题是为什么Path参数不检索列表中的所有标记元素,而只检索第一个列表元素标记中的字母

自定义列表作为资源提供:

<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>