2016-06-02 4 views
0

내가 클래스가 있다고 가정 해 보겠습니다.C# - 개체의 변수가 변경 될 때 목록에있는 개체의 인덱스

public class Person 
{ 
    public string firstName {get; set;} 
    public string lastName {get; set;} 
} 

또한

public List<Person> listOfPeople = new List<Person>(); 

이리스트 및 이후 시점에서 하나의 특정 물체의 변화에 ​​추가 된 다수의 객체를 가정 Person 목록을 초기화 하였다. 어떻게 변경된 객체를 감지 할 수 있습니까? 즉, 실시간으로 변경된 요소의 색인을 얻으려면 어떻게해야합니까?

+0

그렇지 않습니다. 어떤 변화라도 객체는 이것을 어떻게 든 신호해야합니다. –

+1

포함 된 개체의 상태가 변경 될 때 또는 다른 개체가있을 때를 검색 하시겠습니까? – richzilla

+0

속성 설정자에서 코드에서 공통 함수를 호출 할 수 있습니다. 불행히도 알고있는 목록 유형에 'lastchanged'속성을 가져 오는 기본 방법이 없습니다 – LDJ

답변

3

사용에게 ObservableCollection보다는 목록을 CollectionChanged 이벤트에 가입 : 항목이 제거, 추가, 변경, 이동, 또는 전체 목록을 새로 고칠 때

가 발생합니다.

이 이벤트의 인수 - 변경된 내용에 대한 세부 정보가 포함되어 있습니다. 관심있는 속성은 다음과 같습니다.

OldItems 바꾸기, 제거 또는 이동 작업의 영향을받는 항목의 목록을 가져옵니다.

컬렉션의 항목 속성을 변경하려는 경우 각 항목의 PropertyChanged 이벤트에 가입해야 할 수 있습니다. 따라서 항목을 컬렉션에 추가하면 다음과 같이 추가됩니다.

item.PropertyChanged += Item_PropertyChanged; 

그런 다음 그 방법으로해야 할 일을 수행하십시오.

핸들러를 제거하는 것을 잊지 마십시오

item.PropertyChanged -= Item_PropertyChanged; 

당신은 목록/컬렉션에서 항목을 제거 할 때.

3

원하는 것은 변경 사항을 관찰 할 수있는 일종의 컬렉션입니다. 다행스럽게도, 마이크로 소프트는 이미이의 생각 :

ObservableCollection

이것은 당신이 가입 할 수있는 CollectionChanged 이벤트를 제공합니다. 이것은 NotifyCollectionChangedEventArgs의 인스턴스를 사용하여 변경된 개체의 인덱스를 제공합니다.

+1

이러한 컬렉션은 컬렉션의 기존 개체 수정을 검색 할 수 있습니까? 나는 그렇지 않다. 컬렉션의 항목에 대한 참조 만 ___read___ 한 다음 해당 참조를 사용하여 개체를 변경합니다.컬렉션에서 볼 수 없습니다. asker는 _mutable_' Person' 타입을 가지고 있습니다. –

관련 문제