Winform UserControls와 관련하여 이상한 바인딩 문제가 크게 필요합니다.디자인에서 바인딩 오류 및 사용자 정의 컨트롤에 대한 런타임
그 것처럼.
- 은 UserControl을
- UserControl을 가진 양식을 System.Windows.Forms.BindingSource 제어
- BindingSource에 디자인 타임에 엔티티 마시고 유형으로 설정 데이터 소스를 갖고있다 되세요.
- UserControl에는 POCO 클래스의 속성에 바인딩되는 컨트롤이 있습니다. 예 : CreateDate
UserControl 자체의 문제는 없습니다.
그러나 해당 UserControl 포함 된 양식 OG 디자이너를 입력라는 메시지와 디자이너 오류 창을 얻을 : ". 데이터 소스의 속성이나 열 CreateDate에 결합 할 수 없습니다 매개 변수 이름 : DataMember를"실행 I에서동일한 오류가 발생하지만 먼저 Show가 폼에서 호출 될 때. 여기에 CheckBinding 호출 후에 throw 된 스택 추적을 볼 수 있습니다.
양식의 작성 (생성자) 또는로드 이벤트 중 bindingSource의 DataSource가 설정되었는지 여부에 관계없이 오류가 발생합니다.
디자이너가 내 데이터 소스를 디자이너 파일에 설정하는 것을 볼 수 있습니다. this.bindingSourceRecipe.DataSource = typeof (Data.Entities.Recipe);
이 문제를 해결하기 위해 많은 노력을 기울였습니다. 이것은 매우 이상한 것으로 보이는데 이는 죽은 간단한 폼/컨트롤 설정이며 Winforms usercontrols를 사소한 용도로 사용해야합니다.
런타임에 bindingSourceRecipe.DataSource를 temp로 설정하면 어떻게됩니까? 폼의 InitializeComponent() 바로 뒤에 인스턴스가 생기면 오류가 발생하지 않습니다.
폼/컨트롤의 초기화주기가 어떻게 든 데이터 원본 형식에 대한 바인딩 원본 정보를 지우는 것 같습니다.
물론 모든 사용자가 제어하는 곳과 양식에 직접 BindingSource가있는 경우에는 이러한 일이 발생하지 않습니다. 그렇다면 모든 것이 작동하며 DataSource가 Data 엔티티의 인스턴스로 설정되는지 여부는 중요하지 않습니다.
나에게는 완전한 신비처럼 보입니다. 죽은 사람이 단순해야하며,해야 할 일이별로 없습니다.
도움이나 제안을 보내 주시면 대단히 감사하겠습니다. BR 피터 Meldgaard
아, 마침내 찍었습니다. Winform 디자이너의 동작과 코드가 혼합되어 발생했습니다. 공용 속성 setter에서 바인딩 컨트롤 데이터 소스를 설정 했으므로 변경된 항목과 조직을 비교할 수 있도록 엔티티의 복사본을 저장할 수있었습니다. 중요한 점은 양식에 public 속성이있는 컨트롤을 배치하면 디자이너가 생성 한 코드에서 디자이너가이 속성을 null로 설정한다는 것입니다. 난 몰랐어. 따라서 사용자 정의 컨트롤이 인스턴스화 될 때마다 DataSource는 null로 설정되어 typeof (데이터 요소)를 지우고 바인딩 정보가 손실됩니다. –