2012-11-13 3 views
0

나는이 기능이 오버라이드 (override) :ObservableCollection에이 항목을 추가하고 다른 사람이

ObservableCollection<TankstellenItem> completeList = new ObservableCollection<TankstellenItem>(); 
     for(var j = 0; j < listItem.Count; j++) 
     { 
      foreach (FuelItem fItem in listItem.ToList()[j].Fuels) 
      { 
       Debug.WriteLine("HERE AGAIN: " + fItem.Price); 
       TankstellenItem newItem = new TankstellenItem(); 
       ObservableCollection<FuelItem> fuelList = new ObservableCollection<FuelItem>(); 
       newItem = listItem.ToList()[j]; 
       newItem.Fuels = null; 
       fuelList.Add(fItem); 
       newItem.Fuels = fuelList; 
       completeList.Add(newItem); 
       Debug.WriteLine("PRICES: " + completeList.ToList()[0].Fuels[0].Price); 
      } 
     } 
     Debug.WriteLine("COMPLETELIST LENGTH: " + completeList.ToList()[0].Fuels[0].Price + " + " + completeList.ToList()[1].Fuels[0].Price); 

및 결과는 다음과 같습니다 당신은 가격이 다른 foreach 문을 받으시는 수 있듯이

LISTITEM LENGTH: 1 
HERE AGAIN: 1,699 
PRICES: 1,699 
HERE AGAIN: 1,529 
PRICES: 1,529 
COMPLETELIST LENGTH: 1,529 + 1,529 

. 그러나 for-method 후에는 모든 항목에서 출력이 1,529에 불과합니다. 나는 이것이 왜 일어나는 지 이해하지 못한다.

+2

하시겠습니까) 당신이하는 전화. 그건 단지 arrrays (나는 그들이 배열 인 것 같아요)의 복사본을 불필요하게 만드는 것입니다. 또한 변수 newItem을 사용하지 않은 새 객체 인스턴스에 할당하지 않고 선언 할 수 있습니다. –

+0

여기에 listItem (type)이란 무엇입니까? 어떻게 정의됩니까? – nkchandra

+0

listItem이 원래 ObservableCollection newone

답변

0

코드에서 알 수 있듯이 원래 목록에있는 각 TankstellenItem (listItem)의 모든 Fuel 개체를 검색 한 다음 ObservableCollection에 넣으려고합니다. 당신은 단지 FuelItem의 관심을 경우

// Create Complete List 
ObservableCollection<TankstellenItem> completeList = new ObservableCollection<TankstellenItem>(); 
// Loop through each TankstellenItem in listItem 
foreach(TankstellenItem tItem in listItem) { 
     // Create an ObservableCollection to store FuelItem objects 
     ObservableCollection<FuelItem> fuelList = new ObservableCollection<FuelItem>(); 
     // Loop through each FuelItem in the current TankstellenItem 
     foreach(FuelItem fItem in tItem) { 
      // Add the FuelItem from current TankstellenItem to the ObservableCollection 
      Debug.WriteLine("HERE AGAIN: " + fItem.Price); 
      completeList.Add(new TankstellenItem() { 
       // Add the FuelItem 
       Fuels = new ObservableCollection<FuelItem>() { 
        fItem, 
       }; 
      } 
     } 

} 

쉽게 될 수도 있지만,하는 TankstellenItem 내부를 감싸는 대신 FuelItems의 컬렉션을 가지고있다.

ObservableCollection<FuelItem> completeList = new ObservableCollection<FuelItem>(); 
foreach(TankstellenItem tItem in listItem) { 
     foreach(FuelItem fItem in tItem) { 
      completeList.Add(fItem); 
     } 
} 
Linq를 만들 수
+0

아니요 , 그것은 정말로 옳지 않습니다. 모든 FuelItem을 하나의 TankstellenItem에 넣고 싶습니다. 왜냐하면 Listbox에서는 모든 TankstellenItem을 별도의 listItem에있는 모든 연료와 함께 표시하기를 원하기 때문입니다. 예를 들면 : 나는 연료가 2 개인 TankstellenItem을 가지고있다. 목록 상자에서 첫 번째 listboxItem은 연료 1이있는 TankstellenItem이고 두 번째 listboxItem은 Fuel2입니다 – newone

+0

각 'FuelItem'을 자체 TankstellenItem으로 의미합니까? –

+0

예. 모든 FuelItem에는 자체 TankstellenItem이 있어야합니다. – newone

0

이 쉽게 : 당신이 실제로 그것은 해독 조금 어렵지만, 시작을 위해, 나는 (당신이 중복 .ToList 모두 제거해야한다고 생각

var completelist=listItem.SelectMany(
     i=>i.Fuels.Select(
      f=>new TankstellenItem { Fuels=new ObservableCollection<FuelItem>(new[] { f})} 
     ) 
    ).ToList(); 
관련 문제