2010-02-26 2 views
3

이 문제로 인해 응용 프로그램의 도메인을 변경하기 전에 내가 본 것을 확인하는 사람이 필요합니다. 문제는 서로 상속하는 인터페이스에 대해 데이터 바인딩 할 때 기본 인터페이스의 속성을 볼 수 없다는 것입니다.인터페이스 상속을 사용하여 Winforms 데이터 바인딩

데이터 바인딩을 사용하는 WinForms 응용 프로그램을 만들고 있습니다. 이것은 .net3.5에 있으며 wpf를 사용할 수 없습니다.

어쨌든, 다음과 같은 설정이 있습니다.

public interface IClassOne 
{ 
    string Prop1 { get; set; } 
} 

public interface IClassTwo : IClassOne 
{ 
    string Prop2 { get; set; } 
} 

public abstract class ClassOne : IClassOne 
{ 
    public string Prop1 { get; set; } 
} 

public class ClassTwo : ClassOne, IClassTwo 
{ 
    public string Prop2 { get; set; } 
} 

기본 클래스는 공통 속성과 논리를 유지합니다. 기본 인터페이스는 공통 속성을 가지므로 각 구현에서 구현해야합니다.

위의 클래스 구조에 데이터 바인딩하는 경우 IClassTwo에 바인딩됩니다. 문제는 내가 IClassTwo에 databind 할 때 WinForms의 디자이너 작업에서 Prop1을 볼 수 없다는 것입니다. 그 한계를 극복하고 Prop1에 바인딩되는 컨트롤을 얻더라도 작동하지 않습니다.

그러나 두 ClassTwo를 바인딩하면 데이터 바인딩이 작동합니다.

모의 수업을 사용하고 테스트하기가 너무 어려워서 구체적인 수업을 다루고 싶지 않습니다. 또 다른 구체적인 구현을 할 때 코드를 반복해야하기 때문에 IClassTwo에 모든 것을 넣고 싶지 않습니다.

내가 알아야 할 것은 진정한 효과가없는 경우입니다. 이유를 알면 보너스가됩니다.

는 토니

답변

1

http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/4151e6b6-44f7-45e2-9a8e-92c4f8539095/?prof=required

여기이 작동하지 않는 이유에 MSDN에 게시 무엇의 SNIPPIT 감사합니다. 이것을 쓴 포스터는 "프랭킹"으로 간다.

아니요, 인터페이스에 바인딩 할 수 없습니다. BindingSource는 데이터 소스로 형식을 사용하는 데 도움을줍니다. 내부적으로는 유형 정보를 사용하여 BindingList <> 인스턴스를 인스턴스화합니다. 또한 새 항목을 추가해도 작동하지만 AddingNew 이벤트를 구독하지 않으면 AddNew()가 실패합니다.

+0

더 많은 이유는 그 게시물에서 주어진 상속 된 인터페이스는 "명시 적으로 구현 된"것으로 간주됩니다. 이것은 인터페이스가 다중 상속을 지원하지만 클래스는 그렇지 않다는 사실과 더 관련이 있습니다. 단일 상속 (Inheritance)은 기본 클래스를 결정할 때 모호성을 없애기 때문에 바인더는 클래스에 상속을 기꺼이 수행하지만 인터페이스에서 비슷한 동작을하려면 중복되는 속성 이름을 해결해야합니다. – binki

관련 문제