2017-02-02 10 views
1

Хорошо. Впервые здесь, и у меня есть довольно простой вопрос.Listview отображает только одну запись из XML

У меня есть внешний 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> 

Она имеет больше «инцидент» ы, чем это, но я хотел, чтобы сократить его.

В 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 в каталоге проекта или использование DataContext в Grid Listview), никто не работал.

Что я делаю неправильно или не хватает?

Благодарим вас и жаль, что не торопитесь с таким основным вопросом. <

EDIT: С предложением Супермена, это, как это сейчас:

Latest

+0

Пожалуйста, положить полный рабочий пример, чтобы мы могли увидеть проблему –

ответ

1

Вот что я попытался следующий:

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

И модель:

/// <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; 
     } 
    } 
} 
+0

Это работает для общего числа только данных. Например, у меня есть 4 «инцидента» с цифрами 1,2,3,4 в XML. Каждый инцидент имеет те же самые данные внутри себя. Номер инцидента 1 имеет суммарное значение 1, значение reason1 1 и т. Д. Теперь listview правильно получает 4 записи, но отображает все строки как «1». Вы можете увидеть это в исходном посте в качестве редактирования. – Eldgrimr

+0

@ Eldgrimr Я обновил ответ. Он не делает все в xaml, но также и в коде (или режиме просмотра, с чем вы работаете). Я проверил его, и он работает. –

+1

Привет, Супермен. Благодарим вас за внимание и время. Это работает. Я немного поиграю с этим. Имейте славный день! – Eldgrimr

0

Если вы используете нормальный Binding.Path это следует связать со свойствами объекта DataContext, который должен быть XmlElement так попробуйте {Binding Name}

 Смежные вопросы

  • Нет связанных вопросов^_^