2011-12-15 45 views
7

Hãy xem xét tôi có Bộ sưu tập cặp giá trị khóa (Ex Key = Giá trị MSFT = MSFT Microsoft) mà tôi liên kết với ComboBox. DisplayMemeberPath = Giá trị. nhu cầu sau phải được thực hiệnCặp giá trị khóa Combobox trong WPF

  • On Lựa chọn một mục duy nhất chính cần phải được hiển thị trong Combo,

  • người sử dụng cũng có thể gõ một giá trị thương hiệu mới trong Combo.

Tôi không thể tìm ra giải pháp hỗ trợ cả hai tính năng này. Giải quyết một phá vỡ khác.

<ComboBox IsTextSearchEnabled="True" Name="cmbBrokers" IsEditable="True" 
ItemsSource="{Binding BrokerCodes}" SelectedValuePath="Key" 
DisplayMemberPath="Value" Text="{Binding SelectedBroker, Mode=TwoWay}"> 
+0

Bạn có thể thử một hộp văn bản riêng hiển thị khóa của mục đã chọn. Đặt tên cho combobox và sử dụng nó làm nguồn phần tử liên kết và đường dẫn là selecteditem. Tôi nghĩ rằng bạn sử dụng selecteditem.key để có được chìa khóa nhưng tôi không chắc chắn. – Paparazzi

+0

nếu bạn muốn xem đầu vào mới mà người dùng đã nhập, bạn phải cập nhật các mục nguồn của mình (Mã môi giới) với giá trị mới – blindmeis

Trả lời

27

Tôi đoán những gì bạn đang tìm kiếm như sau.

public class ComboBoxPairs 
{ 
    public string _Key { get; set; } 
    public string _Value { get; set; } 

    public ComboBoxPairs(string _key,string _value) 
    { 
     _Key = _key ; 
     _Value = _value ; 
    } 
} 

Sau đó, bạn tiếp tục và sử dụng lớp này như thế này

List<ComboBoxPairs> cbp = new List<ComboBoxPairs>(); 

cbp.Add(new ComboBoxPairs("Microsoft", "MSFT")); 
cbp.Add(new ComboBoxPairs("Apple", "AAPL")); 

Và ràng buộc nó vào combobox bạn có

cmbBrokers.DisplayMemberPath = "_Key"; 
cmbBrokers.SelectedValuePath = "_Value"; 

cmbBrokers.ItemsSource = cbp; 

Và Khi bạn cần truy cập vào nó chỉ làm

này
ComboBoxPairs cbp = (ComboBoxPairs)cmbBrokers.SelectedItem; 

string _key = cbp._Key; 
string _value = cbp._Value; 

Đây là tất cả yo bạn cần làm.

-3

Tôi không nghĩ rằng ngay lập tức hộp combobox là yếu tố giao diện người dùng thích hợp để bạn sử dụng trong trường hợp này. Vấn đề ở đây là combobox không được thiết kế để hỗ trợ các cặp khóa/giá trị, đặc biệt nếu bạn muốn người dùng có thể thêm giá trị vào từ điển trong khi bạn đang liên kết với khóa. Ví dụ: nếu bạn cho phép họ thêm giá trị, họ làm cách nào để thêm khóa hoặc chọn khóa để cập nhật?

Tôi nghĩ giải pháp là có hai điều khiển: hộp tổ hợp cho lựa chọn khóa và hộp văn bản cho đầu vào giá trị. Hộp văn bản giá trị bị ẩn cho đến khi người dùng chọn một khóa. Khi khóa được chọn, hãy nhập chúng vào ô văn bản và nhấn enter hoặc nút, sau đó đặt giá trị cho khóa đã chọn.

3

Mở rộng ví dụ Adams bằng giải pháp thậm chí còn chung chung hơn.

Trong xaml.cs hãy tạo thuộc tính thu quan sát và gán tập hợp cho nó.

ObservableCollection < KeyValuePair < string , string > > MyCollection { get; set; } 

MyCollection = new ObservableCollection < KeyValuePair < string , string > > () 

{ 
    new KeyValuePair < string , string > ("key1" ,"value1"), 
    new KeyValuePair < string , string > ("key2" ,"value2") 
}; 

Trong tệp xaml, hãy thu thập bộ sưu tập quan sát của bạn vào thuộc tính bạn đã tạo trong mã phía sau.

<ComboBox Grid.Row="3" 
      Grid.Column="1" 
      ItemsSource="{Binding MyCollection}" 
      DisplayMemberPath="Key" /> 

Bạn có thể thay đổi DisplayMemberPath="Key"-DisplayMemberPath="Value" nếu bạn muốn hiển thị giá trị thay thế.

Các vấn đề liên quan