Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/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# Listview仅显示XML中的一条记录_C#_Xml_Wpf_Listview_Data Binding - Fatal编程技术网

C# Listview仅显示XML中的一条记录

C# Listview仅显示XML中的一条记录,c#,xml,wpf,listview,data-binding,C#,Xml,Wpf,Listview,Data Binding,好的。第一次来这里,我有一个非常基本的问题 我在这里存储了一个外部XML。比如说桌面 XML如下所示: <?xml version="1.0" encoding="UTF-8"?> -<Incidents> <Incident> <IncidentNumber>4</IncidentNumber> <Summary>4</Summary>

好的。第一次来这里,我有一个非常基本的问题

我在这里存储了一个外部XML。比如说桌面

XML如下所示:

<?xml version="1.0" encoding="UTF-8"?>

-<Incidents>
    <Incident>    
        <IncidentNumber>4</IncidentNumber>    
        <Summary>4</Summary>    
        <Reason1>4</Reason1>    
        <Reason2>4</Reason2>    
        <Reason3>4</Reason3>    
    </Incident>    
</Incidents>

-
4.
4.
4.
4.
4.
它有比这更多的“事件”,但我想缩短它

在XAML中,我试图在ListView上显示这些数据,如下所示:

<ListView x:Name="lst_data" Height="290" Margin="10,29,10,0" VerticalAlignment="Top" Width="484" BorderThickness="1" BorderBrush="#FFDADADA" HorizontalAlignment="Center" ItemsSource="{Binding Source={StaticResource IncidentProvider}}">
            <ListView.View>
                <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding XPath=//Incident/IncidentNumber}" Header="Number"/>
                    <GridViewColumn DisplayMemberBinding="{Binding XPath=//Incident/Summary}" Header="Summary"/>
                    <GridViewColumn DisplayMemberBinding="{Binding XPath=//Incident/Reason1}" Header="Reason 1"/>
                    <GridViewColumn DisplayMemberBinding="{Binding XPath=//Incident/Reason2}" Header="Reason 2"/>
                    <GridViewColumn DisplayMemberBinding="{Binding XPath=//Incident/Reason3}" Header="Reason 3"/>
                </GridView>
            </ListView.View>
        </ListView>

在某种程度上,这是可行的,但只带来并显示第一条记录,而不显示其余的记录。我尝试了在这个网站上找到的其他东西(比如将XML放入项目目录或在网格Listview中使用DataContext),但都没有成功

我做错了什么或错过了什么


感谢您,也很抱歉花您的时间问了这么一个基本的问题。如果您使用普通绑定,Path is应该绑定到DataContext对象的属性,该对象应该是一个属性,所以请尝试{Binding Name}

以下是我尝试的下一步:

MainWindows.xaml

<Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApplication1"
            xmlns:vm="clr-namespace:WpfApplication1"
            xmlns:model="clr-namespace:WpfApplication1"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="1200">
    <Window.Resources>
        <DataTemplate x:Key="IncidentTemplate" DataType="model:IncidentsIncident">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding IncidentNumber}"/>
                <TextBlock Text="{Binding Summary}"/>
                <TextBlock Text="{Binding Reason1}"/>
                <TextBlock Text="{Binding Reason2}"/>
                <TextBlock Text="{Binding Reason3}"/>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>

    <Grid>
        <DataGrid x:Name="lst_data" AutoGenerateColumns="False" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ItemTemplate="{StaticResource IncidentTemplate}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Number" Binding="{Binding IncidentNumber}" Width="*"/>
                <DataGridTextColumn Header="Summary" Binding="{Binding Summary}" Width="*"/>
                <DataGridTextColumn Header="Reason 1" Binding="{Binding Reason1}" Width="*"/>
                <DataGridTextColumn Header="Reason 2" Binding="{Binding Reason2}" Width="*"/>
                <DataGridTextColumn Header="Reason 3" Binding="{Binding Reason3}" Width="*"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

MainWindows.xaml.cs

using System.Windows;
using System.Xml;
using System.Linq;
using System.Collections.Generic;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public List<IncidentsIncident> ItemCollection { get; set; }

        public MainWindow()
        {
            InitializeComponent();

            XmlDocument doc = new XmlDocument();
            doc.Load("..\\..\\Incidents.xml");

            ItemCollection = new List<IncidentsIncident>();
            foreach (XmlElement item in doc.ChildNodes.OfType<XmlElement>().FirstOrDefault().ChildNodes)
            {
                ItemCollection.Add(new IncidentsIncident()
                {
                    IncidentNumber = byte.Parse(item.ChildNodes[0].InnerText),
                    Summary = byte.Parse(item.ChildNodes[1].InnerText),
                    Reason1 = byte.Parse(item.ChildNodes[2].InnerText),
                    Reason2 = byte.Parse(item.ChildNodes[3].InnerText),
                    Reason3 = byte.Parse(item.ChildNodes[4].InnerText)
                });
            }
            lst_data.ItemsSource = ItemCollection;
        }
    }
}
使用System.Windows;
使用System.Xml;
使用System.Linq;
使用System.Collections.Generic;
命名空间WpfApplication1
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共列表项集合{get;set;}
公共主窗口()
{
初始化组件();
XmlDocument doc=新的XmlDocument();
doc.Load(“..\\..\\incents.xml”);
ItemCollection=新列表();
foreach(doc.ChildNodes.OfType().FirstOrDefault().ChildNodes中的XmlElement项)
{
ItemCollection.Add(newincidensincident())
{
IncidentNumber=byte.Parse(item.ChildNodes[0].InnerText),
Summary=byte.Parse(item.ChildNodes[1].InnerText),
Reason1=byte.Parse(item.ChildNodes[2].InnerText),
Reason2=byte.Parse(item.ChildNodes[3].InnerText),
Reason3=byte.Parse(item.ChildNodes[4].InnerText)
});
}
lst_data.itemsource=ItemCollection;
}
}
}
模型:

/// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class IncidentsIncident
{

    private byte incidentNumberField;

    private byte summaryField;

    private byte reason1Field;

    private byte reason2Field;

    private byte reason3Field;

    /// <remarks/>
    public byte IncidentNumber
    {
        get
        {
            return this.incidentNumberField;
        }
        set
        {
            this.incidentNumberField = value;
        }
    }

    /// <remarks/>
    public byte Summary
    {
        get
        {
            return this.summaryField;
        }
        set
        {
            this.summaryField = value;
        }
    }

    /// <remarks/>
    public byte Reason1
    {
        get
        {
            return this.reason1Field;
        }
        set
        {
            this.reason1Field = value;
        }
    }

    /// <remarks/>
    public byte Reason2
    {
        get
        {
            return this.reason2Field;
        }
        set
        {
            this.reason2Field = value;
        }
    }

    /// <remarks/>
    public byte Reason3
    {
        get
        {
            return this.reason3Field;
        }
        set
        {
            this.reason3Field = value;
        }
    }
}
//
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类意外事件
{
私有字节incidentNumberField;
专用字节总和字段;
专用字节推理1字段;
专用字节推理2字段;
专用字节字段;
/// 
公共字节意外数
{
得到
{
返回此.incidentNumberField;
}
设置
{
this.incidentNumberField=值;
}
}
/// 
公共字节摘要
{
得到
{
返回此.summaryField;
}
设置
{
this.summaryField=值;
}
}
/// 
公共字节1
{
得到
{
返回此.reason1Field;
}
设置
{
this.reason1Field=值;
}
}
/// 
公共字节推理2
{
得到
{
返回此.reason2字段;
}
设置
{
this.reason2Field=值;
}
}
/// 
公共字节推理3
{
得到
{
返回此.reason3字段;
}
设置
{
this.reason3字段=值;
}
}
}

请给出一个完整的工作示例,这样我们就可以看到问题。这只适用于数据总数。例如,我有4个XML中数字为1,2,3,4的“事件”。每个事件在其自身中都有相同的数据。事件编号1的摘要值为1,原因1的值为1,以此类推。现在,listview正确地获得4条记录,但所有行都显示为“1”。您可以在原始帖子中看到它作为编辑。@Eldgrimr I
ve更新了答案。它并不是在xaml中完成所有工作,而是在代码隐藏(或查看模式)中完成所有工作。我
已经测试过了,效果很好。你好,超人。谢谢你的时间和努力。这很有效。我会绕着这个玩一会儿。祝你今天愉快@我很乐意帮忙