목록에없는 값에 바인딩하는 편집 가능한 ComboBox


81

드롭 다운 목록에 항상 선호하는 항목이있는 것은 아니지만 편집 가능한 콤보 상자가 있습니다.

SelectedValue에 바인딩 된 문자열에 전파되는 텍스트 상자에 텍스트를 수동으로 입력 할 가능성을 갖고 싶습니다.

현재 SelectedValue에 바인딩 된 문자열은 입력 된 값이 ComboBox 항목에있는 경우에만 업데이트됩니다.

ComboBox 목록에서 사용할 수없는 사용자 지정 값을 수동으로 입력하고 바인딩 된 값에 올바르게 전파하려면 어떻게해야합니까?

답변:


135

나는 어제와 오늘 이것을하고 있었고 다음과 같이 보입니다.

  1. 콤보 박스 설정 IsEditable="true"

  2. 에 바인딩하는 대신 콤보 상자 SelectedItemText속성에 바인딩

  3. 문자열 대신 사용자 지정 개체에 바인딩하는 경우 TextSearch.TextPath="NameOfField". 이렇게하면 텍스트 검색 동작이 작동하고 텍스트 상자에도이 속성이 표시됩니다.

대체로 다음과 같은 결과를 얻었습니다.

<ComboBox x:Name="c" 
          IsEditable="True" 
          IsTextSearchEnabled="True" 
          IsTextSearchCaseSensitive="False" 
          StaysOpenOnEdit="True"
          Text="{Binding NameOnViewModel}"
          TextSearch.TextPath="NameOnChildItems"  
          ItemsSource="{Binding Items}" 
          ItemTemplate="{StaticResource DataTemplate}" />

<TextBlock Text="{Binding ElementName=c,Path=Text}" />

4
아, ItemTemplate을 사용하지 않는 경우 DataTemplate을 사용하는 대신 DisplayMemberPath = "Name"을 사용할 수 있습니다.
John Gardner

28

Combo의 Text 속성에 바인딩을 설정하는 것으로도 충분합니다.

<ComboBox  IsTextSearchEnabled="True"    IsEditable="True" 
ItemsSource="{Binding Items}" Text="{Binding SelectedItemText, Mode=TwoWay}" />

1
문자열 목록에 바인딩하기 위해 완벽하게 작동합니다.
Herman Cordes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.