2014-06-28 92 views
0

我以爲我從另一個帖子解決它在這裏,所以請不要標記爲重複 - 事實證明,它仍然只是增加一個項目的名單,這是最後一個項目。這不是將項目添加到列表的正確方式嗎?它永遠只能將最後一個項目列表因爲某些原因:列表仍然沒有正確添加

public List<ViewPresentation> GetColumnsFromXml(string ColumnsXmlString, string xpath) 
{ 
    XDocument doc = XDocument.Parse(ColumnsXmlString); 
    XNamespace ns = XNamespace.Get("http://schemas.microsoft.com/SystemCenter/Common/UI/Views/GridView"); 
    var expressions = (from ds in doc.Root.Descendants(ns + "Column") select ds).ToList(); 
    List<ViewPresentation> listColumns = new List<ViewPresentation>(); 
    ViewPresentation VP = new ViewPresentation(); 

    for (int i = 0; i < expressions.Count; i++) 
    { 
     var xml = XElement.Parse(expressions[i].ToString()); 

     VP.columName = xml.Attribute("Name").Value; 
     VP.displayName = xml.Attribute("DisplayName").Value; 
     VP.memberBinding = xml.Attribute("DisplayMemberBinding").Value; 
     VP.property = xml.Attribute("Property").Value; 
     VP.dataType = xml.Attribute("DataType").Value; 
     VP.viewwidth = xml.Attribute("Width").Value; 

     listColumns.Add(VP); 
    } 
    return listColumns; 
} 

這是我想要獲取值出的XML:

<Columns> 
<mux:ColumnCollection xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:mux="http://schemas.microsoft.com/SystemCenter/Common/UI/Views/GridView" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:datebinding="clr-namespace:Microsoft.EnterpriseManagement.UI.Extensions;assembly=Microsoft.EnterpriseManagement.UI.Extensions" xmlns:data="clr-namespace:Microsoft.EnterpriseManagement.UI.Extensions;assembly=Microsoft.EnterpriseManagement.UI.Extensions" xmlns:appCommon="clr-namespace:Microsoft.EnterpriseManagement.ServiceManager.Application.Common;assembly=Microsoft.EnterpriseManagement.ServiceManager.Application.Common" xmlns:toolbox="clr-namespace:Microsoft.EnterpriseManagement.UI.WpfToolbox;assembly=Microsoft.EnterpriseManagement.UI.FormsInfra" xmlns:slaBinding="clr-namespace:Microsoft.EnterpriseManagement.ServiceManager.SLA.Common;assembly=Microsoft.EnterpriseManagement.ServiceManager.SLA.Common"> 
    <mux:Column Name="ActualCost" DisplayMemberBinding="{Binding Path=ActualCost, Mode=OneWay}" Width="100" DisplayName="ActualCost.c8e7234bdd574f8097fd3b0d7fb35851" Property="ActualCost" DataType="s:Double" /> 
    <mux:Column Name="ActualDowntimeEndDate" DisplayMemberBinding="{datebinding:DateBinding Path=ActualDowntimeEndDate, Mode=OneWay}" Width="100" DisplayName="ActualDowntimeEndDate.ed1a5af04f814341a88766f2fa18c447" Property="ActualDowntimeEndDate" DataType="s:DateTime" /> 
    <mux:Column Name="ActualDowntimeStartDate" DisplayMemberBinding="{datebinding:DateBinding Path=ActualDowntimeStartDate, Mode=OneWay}" Width="100" DisplayName="ActualDowntimeStartDate.34daa34691ed435597c3a230ff5d8c60" Property="ActualDowntimeStartDate" DataType="s:DateTime" /> 
    <mux:Column Name="ActualWork" DisplayMemberBinding="{Binding Path=ActualWork, Mode=OneWay}" Width="100" DisplayName="ActualWork.4afb1225100040ef8cf93871389b3380" Property="ActualWork" DataType="s:Double" /> 
    <mux:Column Name="Description" DisplayMemberBinding="{Binding Path=Description, Mode=OneWay}" Width="100" DisplayName="Description.f461792cf5d64b10aae47e4c980792e4" Property="Description" DataType="s:String" /> 
    <mux:Column Name="DisplayName" DisplayMemberBinding="{Binding Path=DisplayName, Mode=OneWay}" Width="100" DisplayName="DisplayName.ef4712b1ecbf4f4d9dcea38daa28269e" Property="DisplayName" DataType="s:String" /> 
    <mux:Column Name="$DisplayName$" DisplayMemberBinding="{Binding Path=$DisplayName$, Mode=OneWay}" Width="100" DisplayName="DisplayName.99931bcb16c142cb944c3c2e43467548" Property="$DisplayName$" DataType="s:String" /> 
    <mux:Column Name="$FullName$" DisplayMemberBinding="{Binding Path=$FullName$, Mode=OneWay}" Width="100" DisplayName="FullName.a1b287d94ab04324857568c878defda9" Property="$FullName$" DataType="s:String" /> 
    <mux:Column Name="Impact.DisplayName" DisplayMemberBinding="{Binding Path=Impact.DisplayName, Mode=OneWay}" Width="100" DisplayName="Impact.f412c72e91104455b1695ef1ccca4e91" Property="Impact.DisplayName" DataType="s:String" /> 
</mux:ColumnCollection> 

+3

您正在創建'VP'的單個實例,並將多個對同一對象的引用添加到列表中。在循環內移動聲明和實例。 –

回答

0

移動這個

ViewPresentation VP = new ViewPresentation(); 

裏面的循環。

您正在創建單個對象,而不是爲循環的每次迭代創建一個對象。

0

您正在使用同一個對象。所以你一次又一次添加同一個對象。 添加此行

ViewPresentation VP = new ViewPresentation(); 

作爲循環的第一行。

for (int i = 0; i < expressions.Count; i++) 
{ 
      ViewPresentation VP = new ViewPresentation(); // this is the new line. Will create a new object for every iteration 

      var xml = XElement.Parse(expressions[i].ToString()); 

      VP.columName = xml.Attribute("Name").Value; 
      VP.displayName = xml.Attribute("DisplayName").Value; 
      VP.memberBinding = xml.Attribute("DisplayMemberBinding").Value; 
      VP.property = xml.Attribute("Property").Value; 
      VP.dataType = xml.Attribute("DataType").Value; 
      VP.viewwidth = xml.Attribute("Width").Value; 


      listColumns.Add(VP); 
} 
相關問題