List<>
은 몇 가지 도우미 기능 (예 : sort)을 사용하여 지정된 유형의 항목을 자동으로 크기 조정하는 배열입니다. 그것은 단지 데이터 일 뿐이므로이를 사용하여 모델의 객체 세트에 대한 작업을 실행할 수 있습니다.
BindingList<>
은 IBindingList
인터페이스를 구현하는 입력 된 목록 또는 모음을 둘러싼 래퍼입니다. 이것은 양방향 데이터 바인딩을 지원하는 표준 인터페이스 중 하나입니다. 이는 항목을 추가, 제거 또는 설정할 때 발생하는 ListChanged
이벤트를 구현하여 작동합니다. 연결된 컨트롤은 표시를 새로 고치는시기를 알기 위해이 이벤트를 수신합니다.
BindingSource의 데이터 소스를 List<>
으로 설정하면 내부적으로 목록을 줄이기 위해 BindingList<>
이 만들어집니다. BindingSource 외부에서 액세스하려는 경우 자신의 목록을 BindingList<>
으로 미리 래핑하고 싶을 수도 있습니다. 그렇지 않으면 그냥 동일합니다. 또한 항목을 변경할 때 BindingList<>
에서 상속하여 특별한 동작을 구현할 수도 있습니다.
IEditableObject
은 BindingSource에서 처리합니다. 바인딩 된 컨트롤에서 데이터를 변경할 때 모든 구현 객체에서 BeginEdit을 호출합니다. 그런 다음 BindingSource에서 EndEdit/CancelEdit를 호출하면 개체에 전달됩니다. 다른 행으로 이동하면 EndEdit도 호출됩니다.
현재 내 목록 접근 방식으로 CancelEdit를 호출하면 편집중인 항목이 원래 상태로 돌아 오지 않으므로 Clone()을 사용하게됩니다. 바인딩리스트가 나를 위해 그것을 다룰 거라고 말하는거야? –
Jon
아니요, BindingList는 해당 기능과 아무 관련이 없습니다. BindingSource는 기본 목록의 유형에 관계없이 단순히 현재 개체의 CancelEdit를 호출합니다. 일반 객체에 대한 객체 버전을 자동으로 구현하는 프레임 워크에는 아무 것도 없습니다. 이 목적으로 만 데이터의 원본 복사본을 보관하는 DataTables/DataRows를 사용할 수 있습니다. –
당신은 통제가 목록이 언제 변화 하는지를 알아야한다고 말합니다, 당신은 더 설명 할 수 있습니까? 데이터가있는 데이터가있는 폼에서 DataGridview 및 다른 폼이 있습니다. 이 문제에 대한 당신의 말에 대해 내가 우려해야합니까? – Jon