2011-08-17 5 views
2

사용자 정의 observablecollection을 사용하여 Item에 MyObj 유형이 추가되면 catch하고 Items에 항목을 추가하기 전에 MyObj.DoCalc()를 호출하면됩니다. 또한 기본 클래스처럼 myCustomCollection의 생성자에 목록을 전달하여 해당 목록에 항목을 설정할 수 있기를 원합니다.C# Custom ObservableCollection

public class MyObservableCollection : ObservableCollection<MyObj> 
{ 

    protected override void OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) 
     { 

      // perform calculation 
     } 
     base.OnCollectionChanged(e); 

    } 


} 

그게 내가 가진 것입니다. 나는 constructor를 오버라이드 (override)하는 방법과 Item이 readonly인지 모르기 때문에 전달 된리스트를 어떻게 설정하는지 모른다. 미리 감사드립니다.

+0

콜렉션에서 상속하지 않는 것이 좋습니다. 재정의 라기보다는 변경 이벤트에 대한 권한을 부여 할 수 있습니다. http://stackoverflow.com/questions/2242919/should-i-instantiate-a-collection-or-inherit-from-collection –

답변

3

첫 번째 질문의 경우 NotifyCollectionChangedEventArgs에는 NewItems 속성이 있습니다. 그냥 반복하십시오.

if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)` 
{ 
    foreach(var item in e.NewItems.Cast<MyObj>()) 
     item.DoCalc(); 
} 

이 순서가 확실하지 않습니다.

당신의 두번째 질문에 대한

, 여기 당신이 필요로하는 코드는 다음과 같습니다

public MyObservableCollection(IEnumerable<MyObj> items) : base(items) 
{ 
} 
+0

잘 했어. C#에 대한 나의 noobiness - forgot : base. 고마워요! – Yatrix