2013-01-23 3 views
0

내 모델은 다음과 같습니다.BindingList의 부모를 찾는 방법은 무엇입니까?

public class FItem 
    { 
     public FItem() 
     { 
      FSubsystems = new BindingList<FSubsystem>();    
     } 

     public int RecordId { get; set; } 
     public string ItemName { get; set; } 


     public BindingList<FSubsystem> FSubsystems { get; set; } 


    } 

    public class FSubsystem 
    { 
     public int SubSystemID { get; set; } 
     public string ItemName { get; set; } 
     public int YearID { get; set; } 
    } 

코드 :

FItems = new ObservableCollection<MarketRecord.FItem>(); 
FItems.CollectionChanged += OnUiCollectionChanged; 


     private void OnUiCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
     { 
      if (e.Action == NotifyCollectionChangedAction.Add) 
      { 
       var addedItem = e.NewItems[0] as MarketRecord.FItem; 
       if (addedItem != null) 
       { 
        addedItem.PropertyChanged += OnColumnModified; 

        if (addedItem.RecordId == 0) 
         modifedItems.Add(addedItem); 


        addedItem.FSubsystems.ListChanged += OnColumnModified; 

       } 
      } 
     } 






private void OnColumnModified(object sender, EventArgs e) 
    { 
     if (sender.GetType().Name == "FItem") 
     { 
      MarketRecord.FItem modifiedItem = (sender as MarketRecord.FItem); 
      if (!modifedItems.Contains(modifiedItem)) 
       modifedItems.Add(modifiedItem); 
     } 
     else 
     { 
      // add parent of the binding list (i.e fitem object) add it to    modifedItems 

// Find parent here 
     } 

    } 

내 코드는 내가 OnColumnModified의 다른 절에 목록을 바인딩의 부모를 찾을 필요가 알려줍니다한다. 어떻게해야합니까?

답변

2

현재 코드를 구조화 한 방식은 실제로 가능하지 않습니다.

당신은 익명 메소드의 도움으로이를 달성 할 수

addedItem.FSubsystems.ListChanged += (s, e) => OnColumnModified(addedItem, e); 

ListChanged에 대한 이벤트 핸들러로 익명 메소드를 등록합니다. 해당 이벤트가 발생하면 sender 이벤트 인수가 삭제되고 대신 FItem 인스턴스 인 addedItem이 전달됩니다.

당신은 조금이에 OnColumnModified을 변경하여이 코드의 유형 안전을 향상시킬 수 :

private void OnColumnModified(MarketRecord.FItem modifieditem) 
{ 
    if(!modifiedItems.Contains(modifiedItem)) 
     modifiedItems.Add(modifiedItem); 
} 

이벤트 등록은 지금과 같을 것이다 :

addedItem.PropertyChanged += (s, e) => OnColumnModified(addedItem); 

addedItem.FSubsystems.ListChanged += (s, e) => OnColumnModified(addedItem); 
관련 문제