2012-02-15 2 views
0

ItemsControl이있는 UserControl이 있습니다. 이 ItemsControl은 객체 목록에 바인딩됩니다. 이러한 개체를 표시하려면 개체가 표시되는 방식을 결정하는 * DataTemplate *이 있어야합니다.동적으로 생성 된 컨트롤을 반복하고 특정 속성 가져 오기

TextBox 인 경우 Text 나 ​​ComboBox 인 경우 SelectedItem과 같은 컨트롤의 현재 값을 검색 할 수 있기를 원합니다.

어떻게 이러한 동적으로 생성 된 컨트롤을 반복합니까? 컨트롤의 이름은 런타임 중에 생성되므로이를 알지 못합니다. 내가 컨트롤과 그들의 템플릿 속성에 대한 시각적 트리를 검색하는 외에 생각할 수있는 이유는 가장 간단한 아마도

답변

1

덕분에 .. ObservableCollection에에 ItemsControl에 데이터 소스를 바인딩합니다. 따라서 목록에 모든 유형의 컨트롤을 동적으로 추가 할 수 있습니다.

일단 그렇게하면 목록에서 각 UIElement의 유형을 쉽게 확인할 수 있습니다. 예 : 텍스트 상자 인 경우 캐스팅 등을 통해 텍스트 속성을 가져옵니다.

+0

예, 실제로 ItemsControl 소스를 List에 바인딩했습니다. 아직 ObservableCollection 권한이 있다고 생각합니까? ItemsControl 목록에서 UIElement를 어떻게 확인합니까? ItemsControl.Items는 나에게 목록 소스를 제공합니다 .. 그것은 나에게 ItemsControl에있는 컨트롤을주지 않습니다. – krebstar

+1

먼저 ObservableCollection을 제안한 이유는 ObservableCollection이 INotifyPropertyChanged 인터페이스를 구현하므로 목록의 항목이 변경 될 때입니다. (제거/추가)하면 목록을 바인딩 할 요소를 업데이트합니다. 일반적으로 ItemsControl.datasource 나 심지어 ItemsControl.items (내 머리 꼭대기에는 확실하지 않습니다)를 요소 유형 중 하나로 캐스팅 할 수 있습니다. 그러나 바인딩을 설정하는 실제 목록 요소로 작업하는 것이 좋습니다. 이렇게하면 MVVM 디자인 패턴을 따르고보다 복잡한 응용 프로그램을 만들 때 훨씬 쉽게 작업 할 수 있습니다. –

+0

흠 .. 그건 이해가된다. 그러나 지금까지 내가 가지고있는 것에 적응시키는 방법을 모르겠다. 기본적으로 내 컨트롤에 사용자 인터페이스를 표시하는 방법을 알려주는 객체 목록이 있습니다. 예를 들어 displayname 멤버가있는 객체와 표시 할 문자열 목록 (선택 사항)이 있습니다. 사용자 정의 컨트롤은 콤보 상자로 표시합니다. 이 객체에는 선택한 항목을 설정하는 필드가 없습니다. 만약 그렇다면 선택한 항목을 어떻게 묶을 수 있을지 모르겠다. : S Hoo boy 이것은 너무 혼란 스럽다 : S – krebstar

관련 문제