문제

ASP.NET에서는 다음을 사용하여 DropDownList에서 항목을 가져올 수 있다는 것을 알고 있습니다.

DropDownList1.Items.FindByText

WPF에서 ComboBox에 사용할 수 있는 유사한 방법이 있습니까?

시나리오는 다음과 같습니다.

RestrictionType이라는 열이 포함된 RestrictionFormat이라는 테이블이 있는데, 유형은 이러한 값을 저장하는 테이블에 대한 외래 키입니다.

제가 작성 중인 편집기 응용 프로그램에서는 사용자가 ComboBox에서 RestrictionFormat을 선택하면(잘 작동함) 편집할 세부 정보를 가져옵니다.편집 시 사용자가 하나의 RestrictionType만 선택하도록 두 번째 ComboBox를 사용하고 있습니다.RestrictionType 테이블의 두 번째 콤보박스 바운드 속성이 이미 있지만 레코드에 지정된 값과 일치하도록 선택한 인덱스를 변경해야 합니다.


시나리오는 다음과 같습니다.

RestrictionType이라는 열이 포함된 RestrictionFormat이라는 테이블이 있는데, 유형은 이러한 값을 저장하는 테이블에 대한 외래 키입니다.

제가 작성 중인 편집기 응용 프로그램에서는 사용자가 ComboBox에서 RestrictionFormat을 선택하면(잘 작동함) 편집할 세부 정보를 가져옵니다.편집 시 사용자가 하나의 RestrictionType만 선택하도록 두 번째 ComboBox를 사용하고 있습니다.RestrictionType 테이블의 두 번째 콤보박스 바운드 속성이 이미 있지만 레코드에 지정된 값과 일치하도록 선택한 인덱스를 변경해야 합니다.

이게 말이 돼?

도움이 되었습니까?

해결책

ItemContainerGenerator를 사용할 수 있나요?

ItemContainerGenerator에는 개체 매개변수를 사용하는 ContainerFromItem 메서드가 포함되어 있습니다.콤보박스에 포함된 전체 개체에 대한 참조(또는 이를 재구성하는 방법)가 있는 경우 다음을 사용할 수 있습니다.

ComboBoxItem item = 
    (ComboBoxItem)myComboBox.ItemContainerGenerator.ContainerFromItem(myObject);

다른 팁

WPF에서는 FindName 메서드를 사용할 수 있습니다.

XAML:

    <ComboBox Name="combo">
        <ComboBoxItem Name="item1" >1</ComboBoxItem>
        <ComboBoxItem Name="item2">2</ComboBoxItem>
        <ComboBoxItem Name="item3">3</ComboBoxItem>
    </ComboBox>

코드 숨김 파일

   item1.Content = "New content"; // Reference combo box item by name
   ComboBoxItem item = (ComboBoxItem)this.combo.FindName("item1"); // Using FindName method

내용으로 항목을 찾으려면 다음을 사용할 수 있습니다. UI 자동화.

SelectedIndex를 바인딩하는 대신 ComboBox의 SelectedItem을 레코드의 값에 바인딩하는 것이 어떻습니까?

즉, ComboBox(또는 해당 부모)의 DataContext를 선택한 '레코드'로 설정하고 ComboBox의 SelectedItem을 '레코드'의 노출된 속성에 바인딩합니다.

응답이 보다 구체적일 수 있고 소스 레코드와 채워진 ComboBox 모두에서 사용 중인 변수와 유형을 참조할 수 있도록 일부 코드 조각이나 추가 세부 정보를 제공할 수 있다면 도움이 될 수 있습니다.

다음 두 가지 방법으로 콤보박스 항목을 검색할 수 있습니다.

항목별:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromItem(control.SelectedItem);

색인별:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromIndex(1);

정확히 무엇을 하려고 하는지에 대한 맥락을 알려주실 수 있나요?

콤보박스에 어떤 개체를 넣고, 어떤 방법을 사용하나요?(항목 소스 속성을 설정하거나 바인딩하고 있습니까?) 왜 "텍스트"로 항목을 조회해야합니까?WPF에서 가장 일반적인 사용법은 SelectedItem 속성을 다른 항목에 바인딩하여 표현을 사용하여 선택한 항목을 검색/설정할 수 있도록 하는 것입니다.목록에서 특정 항목을 찾아야 하는 특정 요구 사항이 있습니까?

최악의 경우 Linq To Objects를 사용하여 ComboBox를 바인딩하는 컬렉션에서 검색을 수행할 수 있습니다.

ComboBoxItem(즉, ItemsSource를 바인딩할 때 WPF에서 뒤에서 생성된 요소)을 바인딩하는 컬렉션의 실제 개체인 SelectedItem과 혼동하지 마세요.이는 일반적으로 WPF에 익숙하지 않을 때 발생하는 대부분의 문제의 원인입니다.실제 ComboBoxItem을 찾아야 하는 경우는 거의 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top