Комбинация ключевых значений пары в WPF - PullRequest
9 голосов
/ 15 декабря 2011

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

  • При выборе элемента в поле со списком должен отображаться только ключ,

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

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

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

Ответы [ 3 ]

31 голосов
/ 09 марта 2013

Полагаю, вы ищете следующее.

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 голосов
/ 05 октября 2016

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

В 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 свяжите свою наблюдаемую коллекцию со свойством, которое вы создали в коде позади.

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

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

0 голосов
/ 15 декабря 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...