首页 > 解决方案 > 从 Xml 数据制作嵌套数据网格的问题

问题描述

我正在尝试使用序列化/反序列化显示包含在 xml 文件中的一些数据。我实际上在制作视图以显示 XML 文件的内容时遇到问题。

我正在尝试做的实际上是使网格布局看起来像这样:

在此处输入图像描述

Xml 结构是这样的:

<?xml version="1.0" encoding="utf-8" ?>
<Data>
  <Car Title="Audi">
    <Modele>A3</Duration>
  </Car>
  <Car Title="Peugeot">
  </Car>
  <4x4 Title="Audi">
    <Options Number="1">
      <Technology Title="Moteur">
      </Technology>
      <Technology Title="Roue">
      </Technology>
    </Options>
    <Options Number="2">
      <Technology Title="Roue">
      </Technology>
      <Technology Title="Moteur">
      </Technology>
    </Options>
   </4x4>
</Data>

我所做的实际上远非我想要的:

<WrapPanel HorizontalAlignment="Right" Orientation="Vertical">
        <StackPanel>
            <Label Content="Cars" HorizontalContentAlignment="Center" FontSize="14" FontWeight="Bold"/>
            <DataGrid AutoGenerateColumns="True" >
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Marque" Binding="{Binding Marque}" />
                    <DataGridTextColumn Header="Modele" Binding="{Binding Modele}" />
                </DataGrid.Columns>
            </DataGrid>
        </StackPanel>

        <StackPanel>
            <Label Content="4x4" HorizontalContentAlignment="Center" FontSize="14" FontWeight="Bold"/>
            <DataGrid AutoGenerateColumns="True" >
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Marque" Binding="{Binding Marque}" />
                    <DataGridTextColumn Header="Options" Binding="{Binding Options}" />
                </DataGrid.Columns>
            </DataGrid>
        </StackPanel>
        </WrapPanel>

以及我的代码中 xml 文件的完整映射:

[KnownType(typeof(Cars))]
[KnownType(typeof(4x4))]
[KnownType(typeof(Options))]
public abstract class DataItem
{
    [XmlAttribute]
    public string Marque{ get; set; }
}

[DataContract ,XmlRoot(ElementName = "Data")]
public class Data
{
    [XmlElement("Cars", Type=typeof(Cars))]
    [XmlElement("4x4", Type=typeof(4x4))]
    [DataMember]
    public List<DataItem> Items { get; set; }
}

[XmlRoot(ElementName = "4x4")]
public class 4x4: DataItem
{
    [XmlElement(ElementName = "Options", Type=typeof(Options))]
    public List<Options> Options{ get; set; }
}

[XmlRoot(ElementName = "Options")]
public class Options
{
    [XmlAttribute(AttributeName = "Number")]
    public int Number { get; set; }

    [XmlElement(ElementName = "Components", Type=typeof(Components))]
    public List<Technology> Technologys { get; set; }
}

[XmlRoot(ElementName = "Cars")]
public class Cars : DataItem
{
    [XmlElement(IsNullable = true)]
    public Nullable<int> Modele { get; set; }
}

public class Technology : DataItem
{
}

标签: c#.netwpfxaml

解决方案


推荐阅读