在propertygrid C#中将对象列表转换为ExpandableObject

时间:2018-07-08 21:34:06

标签: c# propertygrid

您好,我知道这可能被标记为重复项,也可能不会被标记为重复项,但是我试图使对象列表显示为属性网格中存在的可扩展对象。

我有两个SodeAttribute类:

public class SodeAttribute
{
    /// <summary>
    /// Name of attribute   
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// Value of attribute  
    /// </summary>
    public string Value { get; set; }
}

和一个SodeElement类:

public class SodeElement
{
    //[Browsable(false)]
    /// <summary>
    /// Type of sode element    
    /// </summary>
    public string Type { get; set; }

    /// <summary>
    /// List of Sode Attributes
    /// </summary>
    public List<SodeAttribute> SodeAttributes = new List<SodeAttribute>();

    /// <summary>
    /// List of Sode Elements
    /// </summary>
    public List<SodeElement> ChildElements = new List<SodeElement>();
}

,其中包含SodeAttributes列表和SodeElements列表。这基本上代表了这样的XML结构:

 <SimObject Name="Wind Sock">
    <Placement Lat="47.1821" Lon="7.4188" Alt="0#AGL" Hdg="0.0"/>           
    <Model SimTitle="12bPilot_SODE_Windsock_Slow">      
        <VariableDrivenRotation Variable="WindDirection" Axis="HEADING" Animated="No"/>         
        <ConditionalVisibility Variable="WindSpeed" Value="0-14"/>
    </Model>
    <Model SimTitle="12bPilot_SODE_Windsock_Medium_Speed">      
        <VariableDrivenRotation Variable="WindDirection" Axis="HEADING" Animated="No"/>         
        <ConditionalVisibility Variable="WindSpeed" Value="15-28"/>
    </Model>
    <Model SimTitle="12bPilot_SODE_Windsock_Fast">      
        <VariableDrivenRotation Variable="WindDirection" Axis="HEADING" Animated="No"/>         
        <ConditionalVisibility Variable="WindSpeed" Value="29-60"/>
    </Model>            
</SimObject>

其中XML的属性作为SodeAttribute对象存储在Sode属性的列表中,而根SimObject的任何子元素都存储在SodeElements列表中,例如和和子元素

因此在此XML中,SodeElement具有3个子SodeElement和1个Sode属性。

例如,我会将SimObject的任何子元素(例如Model)显示为ExpandableObject,并将任何属性显示为该可扩展对象中的属性,并将该模型元素“ model”中的任何其他元素显示为像这样的可扩展对象

示例1: image

示例2: image

我已经尝试了很多次,我想我处于循环中,所以我喜欢一个可行的例子。谢谢!

0 个答案:

没有答案