2011-12-15 2 views
7

У меня есть пара пар ключей (Ex Key = MSFT Value = MSFT Microsoft), которые я связываю с ComboBox. DisplayMemeberPath = Значение. Следующие потребности должны быть выполненыКомбинация ключевых значений пара в WPF

  • На выбор пункта только ключ должен отображаться в Combo,

  • пользователь может также ввести совершенно новое значение в Combo.

Я не могу найти решение, которое поддерживает обе эти функции. Решение одного разрывает другой.

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

Вы можете попробовать отдельное текстовое поле, которое отображает ключ выбранного элемента. Назовите combobox и используйте его в качестве источника элемента привязки, и путь будет выбран. Я думаю, вы используете selectitem.key, чтобы добраться до ключа, но я не уверен. – Paparazzi

+0

Если вы хотите увидеть новый ввод, введенный пользователем, вам необходимо обновить свой источник items (BrokerCodes) новым значением – blindmeis

ответ

27

Я думаю, что вы ищете, так это следующим образом.

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

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

Затем вы идете и использовать этот класс, как этот

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

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

и привязать его к выпадающий список у вас есть

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

cmbBrokers.ItemsSource = cbp; 

И когда вам нужно получить к нему доступ только сделать это

ComboBoxPairs cbp = (ComboBoxPairs)cmbBrokers.SelectedItem; 

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

Это все лет Вам нужно сделать.

-3

Я не думаю, что прямо из коробки combobox является правильным элементом пользовательского интерфейса, который вы можете использовать в этой ситуации. Проблема здесь в том, что combobox не предназначен для поддержки пар ключ/значение, особенно если вы хотите, чтобы пользователь мог добавлять значения в словарь во время привязки к ключу. Например, если вы разрешаете им добавлять значение, как добавить ключ или выбрать ключ для обновления?

Я думаю, что решение состоит из двух элементов управления: combobox для выбора ключа и текстового поля для ввода значения. Текстовое поле значений скрывается до тех пор, пока пользователь не выберет ключ. После выбора ключа введите их значение в текстовое поле и нажмите клавишу ввода или кнопку, а затем установите значение для выбранной клавиши.

3

Расширение на примере Адамса с еще более общим решением.

В xaml.cs создается видимое свойство коллекции и присваивается ему коллекция.

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") 
}; 

В файле xaml databind ваша наблюдаемая коллекция для свойства, которое вы создали в коде позади.

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

Вы можете изменить DisplayMemberPath="Key" к DisplayMemberPath="Value", если вы хотите, чтобы отобразить значение вместо этого.

Смежные вопросы