데이터 바인딩과 관련된 인터페이스

ADO.NET을 사용하면 애플리케이션과 처리할 데이터의 바인딩 요구를 충족할 다양한 데이터 구조를 만들 수 있습니다. Windows Forms에서 데이터를 제공하거나 사용하는 고유 클래스를 만들고 싶을 수도 있습니다. 이러한 개체는 기본 데이터 바인딩부터 디자인 타임 지원, 오류 확인, 변경 사항 알림, 심지어 데이터 자체에 적용된 변경 내용의 구조화된 롤백 지원에 이르기까지 다양한 수준의 복합 기능을 제공할 수 있습니다.

데이터 바인딩 인터페이스의 소비자

다음 섹션에서는 두 그룹의 인터페이스 개체를 설명합니다. 첫 번째 그룹에서는 데이터 소스 작성자에 의해 데이터 소스에 구현된 인터페이스를 나열합니다. 이러한 인터페이스는 데이터 소스 소비자가 사용하며, 이러한 소비자의 대부분은 Windows Forms 컨트롤 또는 구성 요소입니다. 두 번째 그룹에서는 구성 요소 작성자를 위해 설계된 인터페이스를 나열합니다. 구성 요소 작성자는 Windows Forms 데이터 바인딩 엔진에서 사용할 데이터 바인딩을 지원하는 구성 요소를 만들 때 이러한 인터페이스를 사용합니다. 양식과 연결된 클래스 내에 이러한 인터페이스를 구현하여 데이터 바인딩을 사용할 수 있습니다. 각 경우에 데이터와의 상호 작용이 가능한 인터페이스를 구현하는 클래스가 제공됩니다. Visual Studio RAD(신속한 애플리케이션 개발) 데이터 디자인 환경 도구는 이미 이 기능을 활용하고 있습니다.

데이터 소스 작성자가 구현할 수 있는 인터페이스

다음 인터페이스는 Windows Forms 컨트롤에서 사용할 수 있도록 설계되었습니다.

  • IList 인터페이스

    IList 인터페이스를 구현하는 클래스는 Array, ArrayList 또는 CollectionBase일 수 있습니다. 이러한 클래스는 Object 형식의 항목으로 이루어진 인덱스 목록입니다. 인덱스의 첫 번째 항목에 따라 형식이 결정되기 때문에 이러한 목록에는 같은 형식이 포함되어 있어야 합니다. IList는 런타임에만 바인딩에 사용할 수 있습니다.

    참고

    Windows Forms와 바인딩할 비즈니스 개체 목록을 만들려면 BindingList<T>를 사용하는 것이 좋습니다. BindingList<T>는 양방향 Windows Forms 데이터 바인딩에 필요한 기본 인터페이스를 구현하는 확장 가능한 클래스입니다.

  • IBindingList 인터페이스

    IBindingList 인터페이스를 구현하는 클래스는 훨씬 더 높은 수준의 데이터 바인딩 기능을 제공합니다. 이 구현은 목록 자체가 변경된 경우(예: 목록 항목 개수의 증가/감소)뿐 아니라 목록 항목이 변경된 경우(예: 고객 목록의 세 번째 항목에서 주소 필드가 변경됨)에도 기본적인 정렬 기능과 변경 알림을 제공합니다. 변경 알림은 여러 컨트롤을 같은 데이터에 바인딩할 때 한 컨트롤의 데이터 변경을 다른 바인딩된 컨트롤에 전파하려는 경우에 중요합니다.

    참고

    true일 때 ListChanged 이벤트를 발생시켜 목록 변경이나 목록의 항목 변경을 나타내는 SupportsChangeNotification 속성을 통해 IBindingList 인터페이스에 대해 변경 알림을 사용할 수 있습니다.

    변경 유형은 ListChangedEventArgs 매개 변수의 ListChangedType 속성을 통해 설명됩니다. 그러므로 데이터 모델이 업데이트될 때마다 같은 데이터 소스에 바인딩된 다른 컨트롤과 같은 모든 종속 뷰도 업데이트됩니다. 그러나 목록 안에 포함된 개체가 변경될 경우에는 목록에 이를 알려 목록에서 ListChanged 이벤트를 발생시킬 수 있도록 해야 합니다.

    참고

    BindingList<T>IBindingList 인터페이스의 제네릭 구현을 제공합니다.

  • IBindingListView 인터페이스

    IBindingListView인터페이스를 구현하는 클래스는 IBindingList 구현의 모든 기능 이외에 필터링 및 고급 정렬 기능도 제공합니다. 이 구현은 문자열 기반 필터링 기능과 속성 설명자 방향 쌍을 사용한 여러 열 정렬 기능을 제공합니다.

  • IEditableObject 인터페이스

    IEditableObject 인터페이스를 구현하는 클래스를 사용하면 해당 개체에 대한 변경 내용을 영구화할 시기를 제어할 수 있습니다. 이 구현은 BeginEdit, EndEditCancelEdit 메서드를 제공하며 이를 통해 개체의 변경 내용을 롤백할 수 있습니다. BeginEdit, EndEditCancelEdit 메서드의 기능 및 데이터의 변경 내용을 롤백할 수 있도록 이러한 메서드가 서로 결합하는 방법에 관한 간단한 설명은 다음과 같습니다.

    • BeginEdit 메서드는 개체 편집 시작 시 신호를 보냅니다. 이 인터페이스를 구현하는 개체는 CancelEdit 메서드가 호출된 경우 업데이트를 무시할 수 있도록 BeginEdit 메서드 호출 후에 모든 업데이트를 저장해야 합니다. Windows Forms 데이터 바인딩 시 단일 편집 트랜잭션 범위 내에서 BeginEdit를 여러 번 호출할 수 있습니다(예: BeginEdit, BeginEdit, EndEdit). IEditableObject 구현은 BeginEdit가 이미 호출되었는지 여부를 추적하고 후속 BeginEdit 호출을 무시해야 합니다. 이 메서드는 여러 번 호출될 수 있기 때문에 이에 대한 후속 호출로 인해 기존 데이터가 삭제되지 않도록 하는 것이 중요합니다. 즉, 후속 BeginEdit 호출이 첫 번째 BeginEdit 호출에서 수행한 업데이트를 삭제하거나 저장한 데이터를 변경해서는 안 됩니다.

    • EndEdit 메서드는 BeginEdit가 호출된 후 개체가 현재 편집 모드에 있는 경우 모든 변경 내용을 기본 개체로 푸시합니다.

    • CancelEdit 메서드는 개체의 모든 변경 내용을 무시합니다.

    BeginEdit, EndEditCancelEdit 메서드의 작동 방식에 관한 자세한 내용은 데이터를 다시 데이터베이스에 저장을 참조하세요.

    데이터 기능의 이 트랜잭션 개념은 DataGridView 컨트롤에서 사용합니다.

  • ICancelAddNew 인터페이스

    ICancelAddNew 인터페이스를 구현하는 클래스는 일반적으로 IBindingList 인터페이스를 구현하며 이를 사용하면 AddNew 메서드를 통해 데이터 원본의 추가 내용을 롤백할 수 있습니다. 데이터 원본이 IBindingList 인터페이스를 구현하는 경우 이 데이터 원본으로 ICancelAddNew 인터페이스도 구현해야 합니다.

  • IDataErrorInfo 인터페이스

    IDataErrorInfo 인터페이스를 구현하는 클래스를 사용하면 개체에서 사용자 지정 오류 정보를 바인딩된 컨트롤에 제공할 수 있습니다.

    • Error 속성은 일반 오류 메시지 텍스트(예: “오류가 발생했습니다.”)를 반환합니다.

    • Item[] 속성은 열의 특정 오류 메시지를 포함하는 문자열(예: “State 열의 값이 잘못되었습니다.”)을 반환합니다.

  • IEnumerable 인터페이스

    IEnumerable 인터페이스를 구현하는 클래스는 일반적으로 ASP.NET에서 사용됩니다. 이 인터페이스에 대한 Windows Forms 지원은 BindingSource 구성 요소를 통해서만 사용할 수 있습니다.

    참고

    BindingSource 구성 요소는 바인딩을 위해 모든 IEnumerable 항목을 별도 목록으로 복사합니다.

  • ITypedList 인터페이스

    ITypedList 인터페이스를 구현하는 컬렉션 클래스는 바인딩된 컨트롤에 노출된 속성의 순서와 세트를 제어하는 기능을 제공합니다.

    참고

    GetItemProperties 메서드를 구현하고 PropertyDescriptor 배열이 null이 아닌 경우 배열의 마지막 항목은 다른 항목 목록인 목록 속성을 설명하는 속성 설명자가 됩니다.

  • ICustomTypeDescriptor 인터페이스

    ICustomTypeDescriptor 인터페이스를 구현하는 클래스는 자신에 관한 동적 정보를 제공합니다. 이 인터페이스는 ITypedList와 유사하지만 목록이 아닌 개체에 사용됩니다. 이 인터페이스는 DataRowView에서 내부 행의 스키마를 프로젝션하는 데 사용됩니다. ICustomTypeDescriptor의 단순 구현은 CustomTypeDescriptor 클래스에서 제공됩니다.

    참고

    ICustomTypeDescriptor를 구현하는 형식에 대한 디자인 타임 바인딩을 지원하려면 해당 형식은 IComponent를 구현하고 양식의 인스턴스로 존재해야 합니다.

  • IListSource 인터페이스

    IListSource 인터페이스를 구현하는 클래스를 사용하면 목록이 아닌 개체에서 목록 기반 바인딩을 수행할 수 있습니다. IListSourceGetList 메서드는 IList에서 상속되지 않는 개체의 바인딩 가능한 목록을 반환하는 데 사용됩니다. IListSourceDataSet 클래스에서 사용됩니다.

  • IRaiseItemChangedEvents 인터페이스

    IRaiseItemChangedEvents 인터페이스를 구현하는 클래스는 IBindingList 인터페이스도 구현하는 바인딩 가능한 목록입니다. 이 인터페이스는 형식이 해당 RaisesItemChangedEvents 속성을 통해 ItemChanged 형식의 ListChanged 이벤트를 발생시키는지 여부를 나타내는 데 사용됩니다.

    참고

    데이터 원본이 이전에 설명된 이벤트 변환을 나열하는 속성을 제공하고 BindingSource 구성 요소와 상호 작용하는 경우 IRaiseItemChangedEvents를 구현해야 합니다. 그렇지 않으면 BindingSource도 이벤트 변환을 나열하는 속성을 수행하여 성능이 저하됩니다.

  • ISupportInitialize 인터페이스

    ISupportInitialize 인터페이스를 구현하는 구성 요소는 속성을 설정하고 상호 종속적인 속성을 초기화하는 일괄 최적화를 활용합니다. ISupportInitialize는 다음과 같은 두 개의 메서드를 포함합니다.

    • BeginInit는 개체 초기화가 시작되고 있다는 신호를 보냅니다.

    • EndInit는 개체 초기화가 완료되고 있다는 신호를 보냅니다.

  • ISupportInitializeNotification 인터페이스

    ISupportInitializeNotification 인터페이스를 구현하는 구성 요소도 ISupportInitialize 인터페이스를 구현합니다. 이 인터페이스를 사용하면 초기화가 완료되었음을 다른 ISupportInitialize 구성 요소에 알릴 수 있습니다. ISupportInitializeNotification 인터페이스에는 다음과 같은 두 가지 멤버가 포함됩니다.

    • IsInitialized는 구성 요소가 초기화되었는지 여부를 나타내는 boolean 값을 반환합니다.

    • InitializedEndInit가 호출될 때 발생합니다.

  • INotifyPropertyChanged 인터페이스

    이 인터페이스를 구현하는 클래스는 해당 속성 값이 변경될 때 이벤트를 발생시키는 형식입니다. 이 인터페이스는 각 컨트롤 속성에서 변경 이벤트를 갖는 패턴을 바꾸는 데 사용됩니다. BindingList<T>에서 사용되는 경우 비즈니스 개체는 INotifyPropertyChanged 인터페이스를 구현해야 하며 BindingList`1은 PropertyChanged 이벤트를 ItemChanged 형식의 ListChanged 이벤트로 변환합니다.

    참고

    바인딩된 클라이언트와 데이터 원본 간 바인딩에서 변경 알림이 발생하도록 하려면, 바인딩된 데이터 원본 형식에서 INotifyPropertyChanged 인터페이스를 구현하도록 하거나(기본 설정) 바인딩된 형식에 propertyNameChanged 이벤트를 제공할 수 있습니다. 다만, 둘 다 수행할 수는 없습니다.

구성 요소 작성자가 구현할 수 있는 인터페이스

다음 인터페이스는 Windows Forms 데이터 바인딩 엔진에서 사용됩니다.

참고 항목