ComboBox có thể chỉnh sửa với liên kết với giá trị không có trong danh sách


81

Tôi có hộp kết hợp có thể chỉnh sửa trong đó không phải lúc nào mục ưa thích cũng nằm trong danh sách thả xuống.

Tôi muốn có khả năng nhập văn bản theo cách thủ công vào hộp văn bản được truyền tới chuỗi liên kết với SelectedValue.

Ngay bây giờ, chuỗi liên kết với SelectedValue chỉ được cập nhật nếu giá trị đã nhập nằm trên các chuỗi trong các mục ComboBox.

Làm cách nào để cho phép các giá trị tùy chỉnh không có sẵn trong danh sách ComboBox được nhập theo cách thủ công và truyền đúng cách đến giá trị liên kết?

Câu trả lời:


135

Tôi vừa mới làm việc này ngày hôm qua và hôm nay và nó trông giống như sau:

  1. đặt hộp kết hợp IsEditable="true"

  2. thay vì ràng buộc với SelectedItem, hãy liên kết với thuộc Texttính của combobox

  3. nếu bạn đang liên kết với một đối tượng tùy chỉnh thay vì chỉ chuỗi, bạn cũng cần phải đặt TextSearch.TextPath="NameOfField". Điều này cho phép hành vi tìm kiếm văn bản hoạt động và cũng hiển thị thuộc tính này trong hộp văn bản.

Nói chung, tôi đã kết thúc với một cái gì đó như:

<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
ồ, và nếu bạn không sử dụng ItemTemplate, bạn có thể sử dụng DisplayMemberPath = "Name" thay vì sử dụng DataTemplate.
John Gardner

28

Đặt liên kết với thuộc tính Văn bản của Combo cũng sẽ đủ.

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

1
Hoạt động hoàn hảo được tìm thấy để liên kết với một danh sách các chuỗi.
Herman Cordes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.